Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
750 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Group By sur plusieurs champs d'une table??

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Group By sur plusieurs champs d'une table??

n°816523
tk1311
Harem No Jutsu!
Posté le 06-08-2004 à 11:10:23  profilanswer
 

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

mood
Publicité
Posté le 06-08-2004 à 11:10:23  profilanswer
 

n°816556
serty2
Posté le 06-08-2004 à 13:42:40  profilanswer
 

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 ?

n°816571
tk1311
Harem No Jutsu!
Posté le 06-08-2004 à 13:59:08  profilanswer
 

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
n°816575
serty2
Posté le 06-08-2004 à 14:03:26  profilanswer
 

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.

n°816616
tk1311
Harem No Jutsu!
Posté le 06-08-2004 à 15:02:03  profilanswer
 

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

n°816626
serty2
Posté le 06-08-2004 à 15:08:12  profilanswer
 

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

n°816628
tk1311
Harem No Jutsu!
Posté le 06-08-2004 à 15:09:18  profilanswer
 

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

n°816635
serty2
Posté le 06-08-2004 à 15:11:37  profilanswer
 

tu es sur kelle sgbd?

n°816640
tk1311
Harem No Jutsu!
Posté le 06-08-2004 à 15:12:56  profilanswer
 

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
n°816693
serty2
Posté le 06-08-2004 à 15:55:59  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Group By sur plusieurs champs d'une table??

 

Sujets relatifs
[Oracle / ASP] Transaction bizarre : différée de plusieurs minutes !Table ou Div+Styles CSS
[JAVA] regex, pattern, matcher et group sont dans un bateaucellule cliquable dont l url est un champs d'une BD mysql..
Création de champs "hidden" en utilisant DOMBatche DOS : Boucle for avec plusieurs instructions
Problème de jointure ORACLE avec comparaison de champs nullManipulation simple table Access - doublons
[VBA Word] Comment écrire dans un champs ?Lire une table sous access
Plus de sujets relatifs à : Group By sur plusieurs champs d'une table??


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR