2012-04-07 3 views
1

Richtig, das ist eine sehr seltsame Frage, die ich frage mich, wie ich es kurz erklären werde.MySQL Bestellung lügt mich

Ich habe eine WP-Plugin, die Zeilen in einer MySQL-Tabelle zeichnet etwa so:

meta_id post_id meta_key meta_value 
65387  605  _likes  9 

Dann auf einer meiner Seiten war ich eine Abfrage ausgeführt wird, die am liebsten Beiträge zu wählen, das heißt. ORDER von meta_value DESC. Jetzt ist mir auf meiner Seite aufgefallen, dass ein Beitrag, der 10 erreicht, nicht mehr als oberster Eintrag erscheint und aus den Abfrageergebnissen verschwindet. Ungerade.

Ich ging in die Datenbank und (in PHPMyAdmin) von Meta-Wert bestellt und es gab 9 als Top-Ergebnisse, keiner der 10 erschien !?

Eines, was ich dachte, dass es sein könnte, die Art des Feldes (meta_value) ist, das sind die Einstellungen:

# Column  Type  Collation   Attributes Null Default 
4 meta_value longtext latin1_swedish_ci    Yes  NULL  

jemand etwas denken kann, dass die ORDER BY bedeuten könnte funktionieren nicht, wenn der Wert 10 oder höher !?

Dank

+0

Nizza Titel !! :-) –

Antwort

2

Wenn Sie nicht ändern können Spalte Datentyp keine Sorge ... Keine Notwendigkeit, das zu tun

müssen Sie nur cast es ist in Ganzzahlen in ORDER BY Klausel.

Benutzer Trick:

ORDER BY meta_value+0; 

ODER

ORDER BY CAST(meta_value as SIGNED); 
+0

JA. Vielen Dank! Es funktionierte – benhowdle89

1

Textfelder nicht wie Nummernfelder tun bestellen. 9 ist ein höherer Wert als 10 beim Absteigen (in Textausdrücken) als 10 beginnt mit 1, und es ist die 1, die es ausarbeitet, nicht die ganze Zahl, also 9 erscheint vor 10.

+0

Ohhhh. OK. Da WordPress dieses Feld für mehrere Meta-Werte verwendet, kann ich den Typ wirklich nicht ändern. Gibt es irgendetwas, was ich tun kann? – benhowdle89

+1

Siehe http://stackoverflow.com/questions/8557172/mysql-order-by-sorting-alphanumeric-correctly – GavinCattell