Index d'annuaire : Vérifier que la première lettre existe dans un nom

Index d'annuaire : Vérifier que la première lettre existe dans un nom - PHP - Programmation

Marsh Posté le 29-04-2011 à 17:24:15    

Bonjour,
 
Je n'arrive pas à trouver comment faire mais c est surement super simple.
 
J'ai un annuaire de noms et je voudrais faire le menu où la personne doit selectionner la premiere lettre du nom pour que ça affiche la liste ( avec un WHERE nom like '$lettre%' ).
 
Par contre je ne sais pas comment faire pour avoir en haut le :
 
A  B  C   D  E  F  G  .... etc. en ne mettant des liens QUE s'il existe un nom dont la première lettre est celle d'un nom présent dans ma table des noms.
Donc en fait un truc pour scanner les noms de ma table et sortir les premières lettres...
 
Je pourrais faire un test des lettres une par une pour voir si la table me renvoie un résultat ou non... mais je suis sur qu'il y a plus simple non ?
 
Pouvez-vous m'aider ?


---------------
BattleTag : thekeke#2108 ajoutez moi ;)
Reply

Marsh Posté le 29-04-2011 à 17:24:15   

Reply

Marsh Posté le 01-05-2011 à 11:13:47    

Votre solution de regarder chaque lettre est la bonne.
 
Quand on début en programmation, on est souvent réticent à faire des boucles, pensant que c'est compliqué ou très coûteux en temps de traitement; Mais ce n'est ni l'un ni l'autre, et la boucle est un élément fondamental de la programmation. N'ayez donc pas peur des boucles (tout en sachant qu'il existe aussi des boucles implicites dans des fonctions tels que strpos() et les expressions régulières, qui sont utiles de temps en temps).

Reply

Marsh Posté le 01-05-2011 à 14:15:47    

SELECT DIsTINCT  SUBSTRING(nom, 0, 1 ) FROm table  sera largement plus rapide que de charger l'integralité de l'annuaire en mémoire


Message édité par flo850 le 01-05-2011 à 14:16:16

---------------

Reply

Marsh Posté le 02-05-2011 à 13:37:08    

Clair, +1 pour la requête de flo850 mais avec une petite modification :
SELECT SUBSTRING(nom, 0, 1 ) AS PremiereLettre FROm table GROUP BY PremiereLettre ORDER BY PremiereLettre
 
GROUP BY est plus rapide que DISTINCT en général (sauf si l'optimiseur de requêtes du sgbd transforme le distinct en group by) et le ORDER BY permet d'avoir les premières triées dans le bon sens ;)


Message édité par rufo le 02-05-2011 à 13:39:08

---------------
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
Reply

Marsh Posté le 03-05-2011 à 09:30:30    

Bonjour,
 
Merci pour vos réponses.
 
En effet billgatesanonym c'est vrai que j'ai parfois un peu peur de mettre trop de requete dans mes pages... mais en meme temps ça m'entraine parfois à trouver des astuces :-D ... je garde ton conseil en tout cas en mémoire.
 
Merci à flo850 et rufo, je vais tester votre requete. J'avoue que là à froid j'ai du mal à voir ce qu'elle fait/va retourner mais je suis sur que je réussir à la mettre en place :) (j'espere !!!)


---------------
BattleTag : thekeke#2108 ajoutez moi ;)
Reply

Marsh Posté le 03-05-2011 à 10:00:42    

ça prend la première lettre du champ "nom" dans la table "Table" et pour avoir qu'une instance de chaque lettre, on fait un group by (équivalent au distinct dans le résultat obtenu mais en plus rapide) et on trie (order by) par la première lettre (le AS nomme le champ obtenu en "PremiereLettre" )


---------------
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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed