Group By sur plusieurs champs d'une table??

Group By sur plusieurs champs d'une table?? - PHP - Programmation

Marsh Posté le 06-08-2004 à 11:10:23    

Hey,  
est il possible de faire un "group by" pour plusieurs champs d'une table?  
 
l'objectif étant de regrouper les champs d'une table ayant des données similaires.  
 
J'ai procédé comme suit :  

Code :
  1. $requete = "select base1,base2,base3,base4,base5 from lotus_connaissance group by base1,base2,base3,base4,base5";


 
 
Mais ça marche pas, ma requete me renvoi des doublons.  
 
Si vous avez une idée...  

Reply

Marsh Posté le 06-08-2004 à 11:10:23   

Reply

Marsh Posté le 06-08-2004 à 13:42:40    

peut etre je me trompe mais il me semble que le group by s'utilise quand on utilise des fonction de groupe sur une colonne
donc dans ce cas, ce n'est pas approprié.
 
que cherches tu a faire exactement ?

Reply

Marsh Posté le 06-08-2004 à 13:59:08    

Mon objectif est de grouper les champs dont les valeur sont les mêmes...
C'est à dire, si le champ Base1 à une valeur identique au champ Base2 alors ces champs sont regroupée...
j'arrive pas à trouver une solution à mon probleme...


Message édité par tk1311 le 06-08-2004 à 13:59:57
Reply

Marsh Posté le 06-08-2004 à 14:03:26    

arf, cela me parait difficilement realisable en sql pur(le sql agit sur des lignes de data et non sur les colonnes mais peut etre je suis dans l'erreur , je ne suis pas un pro du sql), le plus simple serait d'effectuer un post-traitement php sur les donées récoltées en les comparant avant de les afficher.

Reply

Marsh Posté le 06-08-2004 à 15:02:03    

Argh, ça ça être plus costaud que prévu... comment vais je faire pour exécuter cette action... un problem de plus un!
En tout cas merci serty2 d'éclairer mon chemin...

Reply

Marsh Posté le 06-08-2004 à 15:08:12    

Citation :

comment vais je faire pour exécuter cette action...


 
je pars du principe que tu execute ta requete a partir de php.
 
donc tu vas fetcher les données et apres tu fais une bete comparaison des champs un par un avec la fonction strncmp() http://fr.php.net/manual/fr/function.strncmp.php
mais c long paske fo faire des if imbirqués, peut etre kkun a une meilleure solution, pour ma part je n'en voit malheresement pas....désole :p

Reply

Marsh Posté le 06-08-2004 à 15:09:18    

jeuste un truc :
 
quand je selectionne juste ma base1, et que je fait un group by dessus, tout ce passe bien : toutes mes entrées identiques sont groupées... alors pourquoi l'action de groupement ne s'éffectue pas lorsque je selectionne plusieurs champs... mystère...

Reply

Marsh Posté le 06-08-2004 à 15:11:37    

tu es sur kelle sgbd?

Reply

Marsh Posté le 06-08-2004 à 15:12:56    

Voici mon code

Code :
  1. <?php 
  2.  
  3.   $requete = "select base1,base2,base3,base4,base5 from lotus_connaissance group by base1,base2,base3,base4,base5"; 
  4.     $envoi = mysql_query($requete); 
  5.     $stock= "<textarea width=100>"; 
  6.      
  7.     while($tableau = mysql_fetch_array($envoi)) 
  8.     { 
  9.        
  10.         $leq= $tableau['base1'] == '' ? '':$tableau['base1'] . "\n";
  11.          
  12.  $leq.= $tableau['base2'] == '' ? '':$tableau['base2'] . "\n";
  13.   
  14.  $leq.= $tableau['base3'] == '' ? '':$tableau['base3'] . "\n";
  15.  $leq.= $tableau['base4'] == '' ? '':$tableau['base4'] . "\n";
  16.  $leq.= $tableau['base5'] == '' ? '':$tableau['base5'] . "\n";
  17.       if ($leq !="" ) {
  18.             $stock.=$leq; 
  19.          
  20.         } 
  21.     } 
  22.     $stock.="</textarea>"; 
  23.     echo $stock; 
  24.   ?>


 
je vois pas comment faire pour utiliser le strncmp dans ces conditions...


Message édité par tk1311 le 06-08-2004 à 15:15:01
Reply

Marsh Posté le 06-08-2004 à 15:55:59    

tk1311 a écrit :

Voici mon code

Code :
  1. <?php 
  2.  
  3.   $requete = "select base1,base2,base3,base4,base5 from lotus_connaissance group by base1,base2,base3,base4,base5"; 
  4.     $envoi = mysql_query($requete); 
  5.     $stock= "<textarea width=100>"; 
  6.      
  7.     while($tableau = mysql_fetch_array($envoi)) 
  8.     { 
  9.        
  10.         $leq= $tableau['base1'] == '' ? '':$tableau['base1'] . "\n";
  11.          
  12.  $leq.= $tableau['base2'] == '' ? '':$tableau['base2'] . "\n";
  13.   
  14.  $leq.= $tableau['base3'] == '' ? '':$tableau['base3'] . "\n";
  15.  $leq.= $tableau['base4'] == '' ? '':$tableau['base4'] . "\n";
  16.  $leq.= $tableau['base5'] == '' ? '':$tableau['base5'] . "\n";
  17.       if ($leq !="" ) {
  18.             $stock.=$leq; 
  19.          
  20.         } 
  21.     } 
  22.     $stock.="</textarea>"; 
  23.     echo $stock; 
  24.   ?>


 
je vois pas comment faire pour utiliser le strncmp dans ces conditions...


 
 
bon alors j'ai pondu ca, en me basant uniquement sur base1 , base2 et base3 , si tu veux ajouter les autres ca marche aussi, fo rajouter des clauses imbriquées mais tu devrais le faire facilement en suivant la meme logique :  
 

Code :
  1. $leq = "";
  2. if(!strcmp($tableau['base1'],$tableau['base2']))
  3. {
  4.  $leq = $leq .$tableau['base1']."\n";
  5. if(!strcmp($tableau['base1'],$tableau['base3']))
  6. {
  7. }
  8. else
  9. {
  10.  $leq = $leq .$tableau['base3']."\n";
  11. }
  12. }
  13. else
  14. {
  15.  if(!strcmp($tableau['base1'],$tableau['base3']))
  16. {
  17.  $leq = $leq .$tableau['base1']."\n".$tableau['base2']."\n" ;
  18. }
  19. else
  20. {
  21.  $leq = $leq .$tableau['base1']."\n".$tableau['base2']."\n".$tableau['base3'] ;
  22. }
  23. }


 
Il faut aussi rajouter les tests de chaine vide que je n'ai pas mis.
 
Dis moi si ca fonctionne car j ai pas pu tester, je n'ai pas ta base :(
 
tu peux tester en selectionnant uniquement base 1 2 et 3 dans ta requete
 
Tient moi au courant

Reply

Sujets relatifs:

Leave a Replay

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