Séparer un resultat de requete sur 3 colonnes egales

Séparer un resultat de requete sur 3 colonnes egales - PHP - Programmation

Marsh Posté le 09-05-2006 à 16:04:29    

Salut
 
J'ai une requete qui me sort des resultats par ordre Alpha
seulement j'aimerai qu'ils soient repartis sur 3 colonnes de facon egale et tj en ordre alpha
 
qqun aurait un tuto ?

Reply

Marsh Posté le 09-05-2006 à 16:04:29   

Reply

Marsh Posté le 09-05-2006 à 16:40:37    

Bin tu sais déjà afficher sur un colonne?
Après a toi de choisir si tu veux remplir ligne à ligne ( donc tout les modulo 3 tu en créés une nouvelle ( voir doc sur modulo) comme la:

A B C
D E F


ou colonne par colonne

A C E
B D F


auquel cas tu fais pareil mais tu detecte le changement "de tiers" sur ton tableau

Reply

Marsh Posté le 09-05-2006 à 16:51:19    

sur une colonne aucuns soucis
mais c lui dire de separer sur 3 colonne le nombre global

Reply

Marsh Posté le 09-05-2006 à 16:55:59    

Code :
  1. $sql = "SELECT DISTINCT(category) as category FROM `".$config_databaseTablePrefix."products` ORDER by category";
  2.   if (database_querySelect($sql,$rows))
  3.   {       
  4.     $currentLetter = "";
  5.    
  6.     foreach($rows as $row)
  7.     {
  8.       $firstLetter = strtoupper(substr($row["category"],0,1));
  9.      
  10.       if ($firstLetter <> $currentLetter)
  11.       {
  12.         print "<span style='padding-top:10px;padding-bottom:10px'><b>".$firstLetter."</b></span><br>";
  13.        
  14.         $currentLetter = $firstLetter;
  15.       }
  16.      
  17.       if ($config_useRewrite)
  18.       {
  19.         $categoryHREF = "/category/".str_replace(" ","-",$row["category"])."/";
  20.       }
  21.       else
  22.       {
  23.         $categoryHREF = "search.php?q=category:".urlencode($row["category"]).":";
  24.       }
  25.      
  26.       print "<a title='".$row["category"]."' href='".$categoryHREF."'>".$row["category"]."</a> <span style='color:#666666;font-size:10px'>(".cfg_compte($row["category"])." )</span><br>";
  27.     }
  28.   }


 
c'est ce bout de code que j'aimerai passer en 3 colonnes

Reply

Marsh Posté le 09-05-2006 à 19:10:02    

Salut,
 
il y a aussi une autre solution qui consiste à utiliser une for pour chaque colonne, je développe :

Code :
  1. $query = "select .....";
  2. $result = mysql_query($query);
  3. echo "<table>"; //commence le tableau
  4. while (1) { //ATTETION BOUCLE INFINIE !!!!
  5.     echo "<tr>"; //commence une ligne
  6.     for ($i=0;$i<=3;$i++) {
  7.         if ( $row = mysql_fetech_array($result) ) {
  8.             echo "<td>$row["champs"]</td>";//si il y a une lettres
  9.         } else {
  10.             echo "<td>&nbsp;</td>";//pour finir proprement le tableau
  11.         }
  12.     }
  13.      echo "</tr>";//termine la ligne
  14.     }
  15. //pour controle de sortie de la boucle infinie
  16. if ( $i >= mysql_num_rows($result) ){break;}
  17. }
  18. echo "</table>"; //fini le tableau


 
voila ce que j'ai pu utiliser pour certain site. Je viens de le refaire par mes souvenir, veuillez m'excuser pour les éventuelles erreurs de code !


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 09-05-2006 à 19:10:42    

ensuite à toi de comprendre et de l'adapter en fonction de ton besoin :)


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 09-05-2006 à 23:25:09    

ca ne marche pas c

Reply

Marsh Posté le 10-05-2006 à 10:38:08    

tiens les deux méthodes dont je te parlais appliquer à un tableau "lambda", tu n'as plus qu'a faire pareil avec le retour de ta requete et à ta présentation:

Code :
  1. <?php
  2. $arr = array('A','B','C','D','E','F','G','H','I','J','K');
  3. /*** 1st method: row by row ***/
  4. $res = array();
  5. $row = array();
  6. print "\n1st method:\n";
  7. for($i=0; $i< count($arr) + 3 - count($arr)%3;$i++){
  8.    if($i<count($arr)){
  9.      $res[intval($i/3)][$i%3] = $arr[$i];
  10.    } else {
  11.      $res[intval($i/3)][$i%3] = '_';
  12.    }
  13. }
  14. var_export($res);
  15. /*** 2nd method: col by col ***/
  16. $res=array();
  17. $row = array();
  18. print "\n\n2nd method:\n";
  19. for($i=0; $i<count($arr) + 3 -count($arr)%3;$i++){
  20.    if ($i<count($arr)){
  21.      $res[$i%(intval(count($arr)/3)+1)][] = $arr[$i];
  22.    } else {
  23.      $res[$i%(intval(count($arr)/3)+1)][] = '_';
  24.    }
  25. }
  26. var_export($res);
  27. ?>


 

Reply

Marsh Posté le 10-05-2006 à 19:21:43    

ma méthode, sur qu'elle fonctionne, je l'utilise sur l'un de mes site ;)


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 10-05-2006 à 23:16:41    

Non car moi je cherche pas :  
* 3 colonnes - n lignes  
mais  
* 1 lignes avec 3 colonnes

Reply

Marsh Posté le 10-05-2006 à 23:16:41   

Reply

Marsh Posté le 11-05-2006 à 10:31:43    

alors j'ai pas du comprendre :
le script que je t'ai écris sort une liste sur 3 colonne avec X ligne
style :  
 A B C
 D E F
 G H I
 J K L
 M N O
 P Q R
 S T U
 V W X
 Y Z


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 11-05-2006 à 10:33:27    

stef_dobermann a écrit :

alors j'ai pas du comprendre :
le script que je t'ai écris sort une liste sur 3 colonne avec X ligne
style :  
 A B C
 D E F
 G H I
 J K L
 M N O
 P Q R
 S T U
 V W X
 Y Z


 
et toi tu les voudrais ca :
 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
 
c'est bien ca :??:
 
si oui, il n'y a rien de plus simple ;)


---------------
Tout à commencé par un rêve...
Reply

Sujets relatifs:

Leave a Replay

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