Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1582 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Effectuer un classement alphabétique suivant le deuxiéme mot

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Effectuer un classement alphabétique suivant le deuxiéme mot

n°1807411
coconutes4
Posté le 02-11-2008 à 12:22:04  profilanswer
 

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.

mood
Publicité
Posté le 02-11-2008 à 12:22:04  profilanswer
 

n°1807413
flo850
moi je
Posté le 02-11-2008 à 12:37:34  profilanswer
 

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

n°1808061
grosbin
OR die;
Posté le 04-11-2008 à 11:41:07  profilanswer
 

coconutes4 a écrit :

[php]select * from personnage where nom like 'a%'[/php]


Juste au passage select * from personnage where LEFT(nom,1)='a'  :jap:  
Il serait plus exact de mettre dans des champs tes Lettres pour 'Trier'
 


---------------
Photos Panoramiques Montagnes Haute Savoie
n°1808099
skeye
Posté le 04-11-2008 à 13:05:32  profilanswer
 

grosbin a écrit :

Juste au passage select * from personnage where LEFT(nom,1)='a'  :jap:


Bonne idée, lui dire d'utiliser une syntaxe non standard alors qu'il a une version standard qui marche très bien.[:el g]

Message cité 1 fois
Message édité par skeye le 04-11-2008 à 13:18:36

---------------
Can't buy what I want because it's free -
n°1808152
omega2
Posté le 04-11-2008 à 15:12:43  profilanswer
 

skeye a écrit :


Bonne idée, lui dire d'utiliser une syntaxe non standard alors qu'il a une version standard qui marche très bien.[:el g]

Et qui permet d'utiliser les index à l'inverse du "left".

n°1808163
MEI
|DarthPingoo(tm)|
Posté le 04-11-2008 à 15:19:14  profilanswer
 

grosbin a écrit :


Juste au passage select * from personnage where LEFT(nom,1)='a'  :jap:  
Il serait plus exact de mettre dans des champs tes Lettres pour 'Trier'
 


A priori c'est pour le classement le pbs...
 
Et sinon je pense qu'un

Code :
  1. WHERE nom = 'a%'
  2.   OR nom = '% a%'


fonctionnerais pour le filtrage.

Message cité 1 fois
Message édité par MEI le 04-11-2008 à 15:19:28

---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°1808167
omega2
Posté le 04-11-2008 à 15:30:18  profilanswer
 

MEI a écrit :


A priori c'est pour le classement le pbs...
 
Et sinon je pense qu'un

Code :
  1. WHERE nom = 'a%'
  2.   OR nom = '% a%'


fonctionnerais pour le filtrage.

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.

n°1808170
MEI
|DarthPingoo(tm)|
Posté le 04-11-2008 à 15:37:10  profilanswer
 

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 :D


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°1808174
omega2
Posté le 04-11-2008 à 15:52:23  profilanswer
 

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.

n°1808183
MEI
|DarthPingoo(tm)|
Posté le 04-11-2008 à 16:02:28  profilanswer
 

omega2 a écrit :


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.


Tout dépends en fait le pourquoi d'un seul champs et ce qu'il veut séparer.


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
mood
Publicité
Posté le 04-11-2008 à 16:02:28  profilanswer
 

n°1808268
rufo
Pas me confondre avec Lycos!
Posté le 04-11-2008 à 17:42:36  profilanswer
 

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 :
  1. SELECT les champs à afficher, RIGHT(nom, LOCATE(" ", REVERSE(nom))) AS Tri FROM ... WHERE ... ORDER BY Tri


 
J'ai pas testé par contre...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1808288
ionik
Posté le 04-11-2008 à 18:14:04  profilanswer
 

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


---------------
Recette cookeo Recette de cuisine
n°1808467
sircam
I Like Trains
Posté le 05-11-2008 à 10:29:50  profilanswer
 

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.  :D
 
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 [:spamafote]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Effectuer un classement alphabétique suivant le deuxiéme mot

 

Sujets relatifs
[résolu]boucle de classement selon valeur tableauClassement et modif. automatique de rangs
[PHP] Trier résultats sans effectuer une nouvelle rechercheScript qui charge un css suivant résolution de l'internaute?
Comment accéder à l'enregistrement suivant ou précédent?[access] Tri par ordre chronologique et non pas alphabétique
Effectuer des calculs dans un ordre précisfaire un système de login sur plusieurs pages suivant le login.
problème de conflit avec Include suivant langue, avec script pas à moi 
Plus de sujets relatifs à : Effectuer un classement alphabétique suivant le deuxiéme mot


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR