2009-08-10 8 views
0

J'ai une table qui contient une colonne nommée vues. Chaque fois que l'utilisateur actualise la page, il met à jour le nombre de vues +1.
Ce que j'essaie de faire, c'est de créer une requête mysql pour afficher la liste des lignes en fonction du nombre de vues, du plus haut au plus bas.mysql afficher les lignes dans l'ordre de la valeur la plus élevée à la valeur la plus faible

ce que je pensais travaillerait

SELECT * FROM picdb ORDER BY views DESC LIMIT 10 

même quand je l'ai vue ascendantes, tout est détraqué.

pensées?

EDIT le type de colonne est TEXT

SOLVED type de colonne a changé INT et il fonctionne très bien maintenant. Merci de l'avoir signalé.

+1

Quel est le type de date de la colonne de vues? – Nate

+0

oublié de mentionner que ... post mis à jour – mrpatg

+2

Pourquoi le type de colonne texte? Y aura-t-il autre chose qu'un numéro là-dedans? Si c'était un champ numérique, il commanderait probablement correctement. –

Répondre

3

Si votre type de colonne est TEXTE, le comportement de tri par défaut traite les données comme des chaînes et les trie par ordre alphabétique (et non numériquement).

Modifiez votre type de colonne en un type de numéro, et il triera correctement.

3
SELECT 
    * 
FROM 
    tbl 
ORDER BY 
    CAST(views AS UNSIGNED) DESC 
LIMIT 
    10 

Pourrait faire l'affaire. La vraie question est pourquoi vous avez une colonne contenant des entiers avec le type de texte?

+0

Merci beaucoup, vous m'avez sauvé! –

1
select a,b,CAST(views AS UNSIGNED) c from picdb order by c desc limit 10 
1

Cela ressemble au problème de tri alphanumérique classique. Si le type de colonne est du texte, alors vous voyez probablement l'ordre comme 1, 10, 15, 20, 3. En d'autres termes, c'est le tri par la valeur du texte au lieu de la valeur entière.

Vous pouvez changer la colonne à un type numérique, ou vous pouvez faire:

SELECT * FROM picdb ORDER BY CONVERT(views, UNSIGNED INTEGER) DESC LIMIT 10 

Cependant, ce ne serait pas en mesure de tirer profit de tout indice sur la colonne views. Il vaudrait mieux changer la colonne en type numérique si c'est bien ce qu'elle représente.

0

Si vous souhaitez afficher les lignes de votre table à partir de valeur plus élevée pour réduire la valeur puis utilisez cette requête.

query = "SELECT * FROM CurrencyTable ORDER BY CAST(currency_rate AS UNSIGNED) DESC"; 

Et si vous voulez afficher les lignes de valeur inférieure à la valeur plus élevée utilisez cette requête

query-2 = "SELECT * FROM CurrencyTable ORDER BY CAST(currency_rate AS UNSIGNED) ASC"; 
Questions connexes