Le code suivant est affiché dans l'ordre suivant: 1, 10, 11, 12 de l'id.
Je veux le faire 1,2,3,4 ...
Quelqu'un pourrait-il me dire ce que je devrais faire s'il vous plaît?.
$Q = $this->db->query('SELECT P.*, C.Name AS CatName FROM products AS P LEFT JOIN categories C ON C.id = P.category_id');
Merci d'avance.
Premièrement, ajoutez une clause order by à la fin:
ORDER BY category_id
Si category_id est une chaîne, vous devez la traiter comme un entier. Il y a quelques façons de le faire. J'ajoute généralement un zéro. Vous pouvez aussi le lancer.
ORDER BY category_id + 0
Vous pouvez faire un casting explicite en faisant:
ORDER BY CAST (category_id COMME INTEGRE NON DESIGNÉ)
Cependant, vous devez reconsidérer la structure de votre base de données, car un champ contenant uniquement des valeurs numériques doit également être de type numérique.
Meilleurs voeux, Fabian
Comme mentionné précédemment, MySQL ne prend pas en charge le tri alphanumérique. Un truc commun pour résoudre ce problème est de commencer par ordre de longueur:
ORDER BY LENGTH(column_name), column_name
Tant que la partie non numérique de la valeur a la même longueur, cela triera 1 avant 10, 10 avant 100, etc.
Assurez-vous que la colonne qui contient 1, 2, 3, 4 est de type INT
; si c'est TEXT, vous n'obtiendrez pas un ordre numérique, mais ce que vous décrivez 1, 10, 11, 2, 22, 23, 31, etc.
Et comme d'autres mentionnés, utilisez ORDER BY
Order by ne fonctionne que pour les valeurs numériques ( int ), ne fonctionne pas pour varchar, char
Votre category_id doit être numérique, sinon vous devez transtyper les valeurs en numérique.