Effectuer un classement alphabétique suivant le deuxiéme mot - PHP - Programmation
Marsh Posté le 02-11-2008 à 12:37:34
ca va etre un peu lourd a faire directement dans la requete SQL , peut etre devrai tu rajouter un champ dans ta table qui stocke , en clair le mot qui sert a trier
Marsh Posté le 04-11-2008 à 11:41:07
coconutes4 a écrit : [php]select * from personnage where nom like 'a%'[/php] |
Juste au passage select * from personnage where LEFT(nom,1)='a'
Il serait plus exact de mettre dans des champs tes Lettres pour 'Trier'
Marsh Posté le 04-11-2008 à 13:05:32
grosbin a écrit : Juste au passage select * from personnage where LEFT(nom,1)='a' |
Bonne idée, lui dire d'utiliser une syntaxe non standard alors qu'il a une version standard qui marche très bien.
Marsh Posté le 04-11-2008 à 15:12:43
skeye a écrit : |
Et qui permet d'utiliser les index à l'inverse du "left".
Marsh Posté le 04-11-2008 à 15:19:14
grosbin a écrit : |
A priori c'est pour le classement le pbs...
Et sinon je pense qu'un
Code :
|
fonctionnerais pour le filtrage.
Marsh Posté le 04-11-2008 à 15:30:18
MEI a écrit :
|
Erreur :
1) avec "Bob Marley" ta requête afficherait le nom dans les B et dans les M
2) avec "Sophie De la Marre" ta requête afficherait le nom dans les D, les L les S et les M
La seule solution qui est à la fois simple et efficace, c'est d'avoir une colonne qui indique le texte servant au tri. Toutes les autres solutions consommeraient trop de ressources processeur et seraient trop compliqué à mettre en oeuvre en SQL.
Marsh Posté le 04-11-2008 à 15:37:10
Dans tout les cas faudra faire un calcul un jour ou l'autre. Et bon a priori on ne stocke jamais ce qui est calculable.
Le truc c'est que si c'est pour le trie c'est pas trop trop chiant, si c'est pour le filtrage ça implique a vu de nez au moins une requete imbriqué et là ça complexifie pas mal de chose.
Le plus simple serais ça se trouve d'avoir un champs nom et un champs prenom
Marsh Posté le 04-11-2008 à 15:52:23
MEI a écrit : Dans tout les cas faudra faire un calcul un jour ou l'autre. Et bon a priori on ne stocke jamais ce qui est calculable. |
En théorie on ne stocke pas ce qui est calculable.
En pratique on stocke ce qui demande trop de temps pour être recalculé et ce qui ne peut être calculé par une requête qu'avec de grosses difficultés.
Par exemple dans le cas présent il est parti sur l'idée qu'un pseudo de personnage ne serait constitué que d'un prénom (facultatif) et d'un nom. Mais s'il veut gérer un jour les particules (comme les "de la" ) alors sa requête deviendra d'une trop grande complexité pour être faisable s'il n'a pas un champ qui ne contient que le texte à tester.
PS : En fait là, c'est plus l'expérience qui parle que les bouquins qu'on étudie en court.
Marsh Posté le 04-11-2008 à 16:02:28
omega2 a écrit : |
Tout dépends en fait le pourquoi d'un seul champs et ce qu'il veut séparer.
Marsh Posté le 04-11-2008 à 17:42:36
Bon, si on part du principe qu'on trie par le dernier mot précédé d'un espace, on peut faire un truc du genre :
Code :
|
J'ai pas testé par contre...
Marsh Posté le 04-11-2008 à 18:14:04
rien t'empéche de faire deux champ different lors de la soumission du style explode($mavar, ' ') et de l'envoyé dans les deux champs different et du coup le classement sera plus facile
Marsh Posté le 05-11-2008 à 10:29:50
omega2 a écrit : PS : En fait là, c'est plus l'expérience qui parle que les bouquins qu'on étudie en court. |
Ah beh t'as pas dû avoir de bons cours, parce que ce que tu expliquais plus haut et qui est tout à fait correct, nos profs nous l'enseignaient.
Enfin, quoiqu'on fasse ici en SQL, c'est la garantie de mettre à néant le bénéfice d'un index et de se farcir des table scans, outre des manips de chaînes de caractères sur le DBMS.
Si les perfs sont un soucis, faudrait peut-être envisager une colonne qui stocke l'info dans l'ordre lexicographique souhaité (avec "Marley" pour "Bob Marley" et "Marre" pour "Sophie de la Marre", ce qui permettrait de lancer des queries SQL simples et rapides.
Donc +1 avec omega3-1
Marsh Posté le 02-11-2008 à 12:22:04
Bonjour à tous et à toutes en ce deux novembre 2008.
Je fais appel à vous concernant une requête mysql assez complexe pour moi,
j'ai un champs "personnage", et je fais un affichage alphabétique, jusque là rien de compliquer,
pour la lettre a mon code ressemble à
[php]select * from personnage where nom like 'a%'[/php]
Cependant j'aimerai ajouter une condition à cette requete:
si le champs nom contient deux mots, que ce soit le deuxieme mot qui soit pris pour le classement.
exemple: Bob Marley serait sur la page M et non sur la page B
j'avoue être perdu et ne pas savoir par ou commencer? quelqu'un peut il éclairer ma lanterne?
bonne journée et merci.