Page 1 sur 1

Tri alphabetique

Posté : 24 oct. 2007, 14:33
par typog
Bonjour,
je souhaite afficher sur une page une liste de données et les classer par ordre alphabetique, jusque la tout va bien :
<?php
mysql_select_db($database_connectdb, $connectdb);
$query_tab_boutik = "SELECT nom, `description`, image, url, vote FROM boutik_lien ORDER BY nom ASC";
$tab_boutik = mysql_query($query_tab_boutik, $connectdb) or die(mysql_error());
$row_tab_boutik = mysql_fetch_assoc($tab_boutik);
$totalRows_tab_boutik = mysql_num_rows($tab_boutik);
?>
  <?php do { ?> 
<div class="gentab1">    
<div class="bloc1"><img src="<?php echo $row_tab_boutik['image']; ?>" /></div>
<div class="bloc2"><?php echo $row_tab_boutik['nom']; ?><br /></div>
<div class="bloc3"><?php echo  $row_tab_boutik['vote']; ?><br /></div>
<div class="bloc4"><a href="<?php echo $row_tab_boutik['url']; ?>" target="_blank">Visiter</a></div>
<div ><?php echo $row_tab_boutik['description']; ?></div> </div>
 <?php } while ($row_tab_boutik = mysql_fetch_assoc($tab_boutik)); ?>
        
Mon souci est de classer tout cela sur ma page par groupe et le lier au raccourci rapide, exemple :

(lien vers les lettres sur la page) : 0-9 A C G ...

0-9
->données dont le nom commence par un chiffre

A
->données dont le nom commence par A

C
->données dont le nom commence par C

G
etc....


Et la c'est le drame, je ne vois pas du tout comment proceder :oops:
Si quelqu'un peut m'aiguiller, ou me pousser dans le trou directement, merci beaucoup :lol:

Posté : 24 oct. 2007, 15:09
par d0m
il suffit d'utiliser les chaines de caractères.

Premièrement tu ranges toutes tes résulats dans un tableau associatif.
Ce tableau sera constitué de nombres de groupes différents (27 par exemple si tu veux 0-9 et chaque lettre)
$tab = array();
while ($row_tab_boutik = mysql_fetch_assoc($tab_boutik)){
  $premier_caractere = $row_tab_boutik[nom][0] //la premiere lettre/chiffre
  switch($premier_caractere){
    case '0':case '1':...case '9':$tab['chiffre'][] = $row_tab_boutik;break;
    case 'a':....case 'z' : $tab['$premier_caractere'][] = $row_tab_boutik;break;
  }
}
ensuite tu n'a plus qu'à utiliser ce tableau pour ton affichage.

Posté : 24 oct. 2007, 15:34
par Ryle
Et plutôt qu'une liste de 36 "case" pourquoi pas un simple if ? :)
if (ctype_digit($premier_caractere)) 
   $tab['chiffre'][] = $row_tab_boutik; 
else
   $tab[$premier_caractere][] = $row_tab_boutik;

Ps : penser à délimiter d'apostrophes ou guillemets les chaines utilisées comme index pour éviter les warning et du travail en plus de php qui du coup vérifie qu'il ne s'agit pas d'une constante avant d'utiliser la valeur comme une chaine :
$premier_caractere = $row_tab_boutik['nom'][0]
Et ne pas mettre d'apostrophes autour d'une variable (sortez vos variables !! Image)
$tab[$premier_caractere][] 
// et pas 
$tab['$premier_caractere'][]

Posté : 24 oct. 2007, 18:47
par typog
Merci pour vos reponses bien que je ne sois arrivé a rien -_-'
je continue de chercher :wink:

Posté : 24 oct. 2007, 19:02
par Victor BRITO
Et pourquoi ne pas faire plus simple avec la fonction sort() ? :wink: