web-dev-qa-db-ja.com

mySQLで1、10、11、12ではなく1、2、3を注文する方法

次のコードは、idの1、10、11、12の順に出力します。

1、2、3、4にしたい...

誰か私にどうしたらいいか教えてもらえますか?.

$Q = $this->db->query('SELECT P.*, C.Name AS CatName FROM products AS P LEFT JOIN categories C ON C.id = P.category_id');

前もって感謝します。

29
shin

まず、最後にorder by句を追加します。

ORDER BY category_id

Category_idが文字列の場合は、整数のように扱う必要があります。これを行うにはいくつかの方法があります。通常はゼロを追加します。キャストすることもできます。

ORDER BY category_id + 0
61
Scott Saunders

次のようにして明示的なキャストを行うことができます。

ORDER BY CAST(category_id AS UNSIGNED INTEGER)

ただし、数値のみを含むフィールドも数値型である必要があるため、データベースレイアウトを再検討する必要があります。

よろしく、ファビアン

10
halfdan

前述のように、MySQLは英数字の並べ替えをサポートしていません。これを解決する1つの一般的なトリックは、最初に長さ順に並べることです。

ORDER BY LENGTH(column_name), column_name

値の数値以外の部分が同じ長さである限り、これにより10の前に1、100の前にソートされます。

8

1,2,3,4を保持する列がINTタイプであることを確認してください。TEXTの場合、番号順にはなりませんが、1、10、11、2、22、23を記述したものになります。 、31など。

そして、他の人が述べたように、ORDER BY

6
Jakub

Order by数値に対してのみ機能します(int)、varcharに対しては機能しません、 char

Category_idは数値でなければなりません。そうでない場合は、値を数値にキャストする必要があります。

0
CHanaka