Page 1 sur 1

[Résolu] Opérateur MySQL pour menu alphabétique ?

Publié : 03 mai 2005, 15:53
par GizMecano
Hello,

Désolé si je suis limite hors sujet, mais je ne parviens pas à trouver la réponse par ailleurs, sans doute parce que je formule mal ma recherche. :?

Je recherche l'opérateur qui permet de trouver dans une base MySQL tous les mots commençant par la même lettre afin de pouvoir créer un menu sous forme d'annuaire alphabétique, annuaire qui se compose automatiquement selon les entrées de la table.

Hélas, je ne parviens pas à mettre la main dessus. :?

Merci d'avance pour tout aide.

Ciao,

Publié : 03 mai 2005, 16:26
par pascal
SELECT champ1, champ2 FROM matable ORDER BY champ1 DESC

si tu veux inverser le tri tu mets ASC au lieu de DESC

Publié : 03 mai 2005, 16:28
par pascal
A bien y réfléchir, si tu veux générer un truc du type :

A
Albator
Albatre
Albatros

B

Butée
But
Butoir

Il te faudra plus qu'un simple Opérateur SQL :)

Publié : 03 mai 2005, 18:43
par GizMecano
Hello,

En fait, je me suis mal exprimé, c'est un peu plus compliqué :?

Mais effectivement, il me faudra sans doute plus qu'un seul opérateur.

Ce que je voudrais, en fait, c'est un peu ce que peut faire l'opérateur DISTINCT, mais pour des noms alphabétique, et en l'occurence seulement la première lettre.

En gros, j'ai une série de références, qui comporte des dates et des noms. Pour faire le menu par date, j'ai utilisé DISTINCT ainsi :

Code : Tout sélectionner

echo "<ul class=\"menu\">\n";
  $menuchrono=mysql_query 
  ("SELECT DISTINCT annee FROM references ORDER BY annee ASC")
  while($annee = mysql_fetch_array($menuchrono))
   {echo "<li><a href=\"liste.php?annee=", $annee['annee'], "\">", $annee['annee'], "</a></li>\n";	}
echo "</ul>\n";
Faire une liste qui distinguerait tout le nom serait beaucoup trop long pour un simple menu, aussi je voudrais faire la même chose pour les premières lettres des titres utilisés (il ne me mettrait ainsi pas de Y ou de Z si aucun titre ne commence par cette lettre).

Est-ce possible :?:

D'avance, merci.

PS : Je ne suis toujours pas certain d'être dans le sujet du forum, mais je compte sur votre compréhension.

Re: Opérateur MySQL pour menu alphabétique ?

Publié : 03 mai 2005, 19:29
par chBok
GizMecano a écrit :Je recherche l'opérateur qui permet de trouver dans une base MySQL tous les mots commençant par la même lettre afin de pouvoir créer un menu sous forme d'annuaire alphabétique, annuaire qui se compose automatiquement selon les entrées de la table.
:D Vi.

Code : Tout sélectionner

SELECT DISTINCT LEFT(champ,1) AS lettre FROM table ORDER BY lettre ASC

Re: Opérateur MySQL pour menu alphabétique ?

Publié : 03 mai 2005, 20:48
par GizMecano
Hello,
chBok a écrit : :D Vi.
Je le savais, je le savais :D

Et en plus, je brûlais, mais qu'est-ce que la doc de MySQL est mal foutue, bazar ! :shock:

En tout cas, mille mercis :D

Une dernière chose quand même, quand je veux récupérer ma lettre dans la boucle pour créer la liste, il me renvoie :
Notice: Undefined index: nom
Comment je dois écrire la variable alors :?:

[EDIT] Désolé :oops: J'ai oublié de lire le AS lettre :oops: [EDIT]

Ciao,

Re: Opérateur MySQL pour menu alphabétique ?

Publié : 03 mai 2005, 22:03
par GizMecano
Hello,

En continuant mes recherches, j'ai trouvé par ailleurs une autre méthode.

Code : Tout sélectionner


$countryQuery = "SELECT DISTINCT origin FROM fruit ORDER BY origin";
$countryResult = mysql_query($countryQuery, $connection);
$countryList = array();
$countryCount = 0;
while ($country = mysql_fetch_row($countryResult)) 
{
    $countryList[$countryCount] = $country[0];
    $countryCount++;
}

Me semble plus compliqué, nan :?:

Re: Opérateur MySQL pour menu alphabétique ?

Publié : 03 mai 2005, 23:10
par chBok
GizMecano a écrit :

Code : Tout sélectionner

$countryQuery = "SELECT DISTINCT origin FROM fruit ORDER BY origin";
$countryResult = mysql_query($countryQuery, $connection);
$countryList = array();
$countryCount = 0;
while ($country = mysql_fetch_row($countryResult)) 
{
    $countryList[$countryCount] = $country[0];
    $countryCount++;
}

Me semble plus compliqué, nan :?:
Vi !!!

Allez, et après je dors :

Code : Tout sélectionner

$result = mysql_query("SELECT DISTINCT LEFT(champ,1) AS lettre FROM table ORDER BY lettre ASC");
while(list($lettre) = mysql_fetch_array($result)) echo $lettre." - ";  //Pour afficher toute les premières lettres
Ou bien, si tu veux un tableau à double entrée où les index sont les premières lettres :

Code : Tout sélectionner

$sql = mysql_query("SELECT LEFT(champ,1) AS lettre, champ FROM table ORDER BY lettre ASC, champ ASC");
$tableau = array();
while(list($lettre, $champ)) $tableau[$lettre][] = $champ;
print_r($tableau);

Re: Opérateur MySQL pour menu alphabétique ?

Publié : 04 mai 2005, 23:09
par GizMecano
Hello,

Juste un mot de remerciments. :)

Ben ouais, ça se fait non :?: :wink:

Ciao,