Le SQL pour MARIADB:
CREATE TABLE `cms_template_items` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `description` VARCHAR(255) NOT NULL COLLATE 'utf8mb4_unicode_520_ci', `name` VARCHAR(255) NOT NULL COLLATE 'utf8mb4_unicode_520_ci', `url` VARCHAR(255) NOT NULL COLLATE 'utf8mb4_unicode_520_ci', PRIMARY KEY (`id`) ) COLLATE='utf8mb4_unicode_520_ci' ENGINE=MyISAM AUTO_INCREMENT=103;
3 Réponses :
tandis que l'erreur utilisateur est habituellement em> où le problème peut être trouvé, il est littéralement em> un bogue-conception. Le type de colonne est donc j'ai supprimé la commande Si quelqu'un sait comment forcer Mariadb à commander correctement des rangées alphanumériquement, n'hésitez pas à poster une réponse de travail p> p> p>. varchar code> et apparemment mariadb est trop paresseux pour trier les numéros, uniquement par des lettres em>.
par code > Clause et la gestion du tri par PHP, qui obtient le travail effectué avec compétence: P>
$items = array();
while ($row1 = mysqli_fetch_assoc($result1))
{
array_push($items,$row1['name']);
}
sort($items);
echo '<pre>'.print_r($items,1).'</pre>';
Enum code> type. (Vérifiez vos types de colonne!) LI>
ul>
h1 code> serait traité comme
0 code> et ne trierait pas entre
3.1 code> et
2.9 code>.
Commandez par Concat ('', Nom) ASC code>.
@RickJames Cela fonctionne très bien localhost sur php 7.2.9 mais ne pas vivre sur 7.3.7. : - \
La version de PHP ne devrait pas affecter les actions dans MySQL ??
@RickJames Non, a été confondu entre les différences de serveur local et en direct (les espaces étaient uniquement sur le serveur Live).
Notez l'espace principal (HEX 20) sur les deux premières lignes. Les espaces trient avant les personnages visibles; Les chiffres tristent avant les lettres.
20 33 ... 20 68 ... 32 2E ...
Ah, je l'ai remarqué que tout en testant d'autres options que j'ai rencontrées; allez comprendre. Merci beaucoup de rick!
Comme vous l'avez dit dans votre réponse ci-dessus, le problème est que Un moyen de contourner cela dans SQL serait de séparer la partie numérique de votre champ code> nom code> du reste. Idéalement, vous voulez quelque chose d'équivalent à ceci: p> maintenant, pour obtenir des sections distinctes L'idée est de première commande par la partie numérique du nom sur le côté gauche de la chaîne, puis regardez tout le reste à droite du premier espace. Notez que la partie numérique est convertie en décimale (4,2). p> L'approche spécifique dépendra fortement du format de vos données. Vous devrez peut-être modifier un peu la regex et vous souhaiterez peut-être une valeur mais à la fin, le tri sur la couche d'application est plus facile et sera plus flexible. L'approche ci-dessus ne fonctionnera que si le modèle de vos données est relativement cohérent. p> p> varchar code> est effectué lexicographiquement. Il regarde littéralement tous les personnages et ne fait pas de commander naturel.
nom_numérique code> et
nom_alpha code>, vous pouvez Faites quelque chose comme ceci: p>
décimale code> avec plus de précision. Vous pouvez également avoir des groupes supplémentaires dans le groupe
par code>, si nécessaire. P>
Montrez-nous
Sélectionnez Nom, Hex (Nom) à partir de template_items Commandez par nom; code> et aussi
Afficher créer la table Table_Name code>.
@RickJames mis à jour.