次のコードは、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');
前もって感謝します。
まず、最後にorder by句を追加します。
ORDER BY category_id
Category_idが文字列の場合は、整数のように扱う必要があります。これを行うにはいくつかの方法があります。通常はゼロを追加します。キャストすることもできます。
ORDER BY category_id + 0
次のようにして明示的なキャストを行うことができます。
ORDER BY CAST(category_id AS UNSIGNED INTEGER)
ただし、数値のみを含むフィールドも数値型である必要があるため、データベースレイアウトを再検討する必要があります。
よろしく、ファビアン
前述のように、MySQLは英数字の並べ替えをサポートしていません。これを解決する1つの一般的なトリックは、最初に長さ順に並べることです。
ORDER BY LENGTH(column_name), column_name
値の数値以外の部分が同じ長さである限り、これにより10の前に1、100の前にソートされます。
1,2,3,4を保持する列がINT
タイプであることを確認してください。TEXTの場合、番号順にはなりませんが、1、10、11、2、22、23を記述したものになります。 、31など。
そして、他の人が述べたように、ORDER BY
Order by数値に対してのみ機能します(int)、varcharに対しては機能しません、 char
Category_idは数値でなければなりません。そうでない場合は、値を数値にキャストする必要があります。