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

  FORUM HardWare.fr
  Programmation
  PHP

  essai de group by (ne fonctionne pas vraiment)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

essai de group by (ne fonctionne pas vraiment)

n°1370609
mainjin
Posté le 19-05-2006 à 15:06:54  profilanswer
 

J'ai deux tables categorie (champs:id_cat et cat) et lien champs (id_lien, lien, num_cat)
 
Une catégorie peux avoir plusieurs liens.
 
ma requête:

Citation :


$sql="SELECT * FROM cat JOIN lien WHERE num_cat=id_cat GROUP BY cat";


 
Ensuite je veux afficher tout ça:

Citation :


 echo "<h3>".$val["cat"]."</h3>\n";  
          echo "<h3><a href=\"http://".$val["lien"]."\">".$val["lien"]."</a></h3>\n";
            while ($val=mysql_fetch_array ($result))
              {
          echo "<h3>".$val["cat"]."</h3>\n";
          echo "<h3><a href=\"http://".$val["lien"]."\">".$val["lien"]."</a></h3>\n"
}


ça marche mais je n'ai qu'un seul lien par catégorie qui s'affiche... et là je ne vois pas ce qui ne marche pas!!
help ! please!
 

mood
Publicité
Posté le 19-05-2006 à 15:06:54  profilanswer
 

n°1370655
Djebel1
Nul professionnel
Posté le 19-05-2006 à 15:32:50  profilanswer
 

Ce que tu mets avant la boucle ne peut pas s'afficher correctement, puisque avant cette boucle, $val ne possède pas de valeurs (en tout cas pas les bonnes).

Code :
  1. while ($val=mysql_fetch_array ($result)) {
  2.           echo "<h3>".$val["cat"]."</h3>\n";
  3.           echo "<h3><a href=\"http://".$val["lien"]."\">".$val["lien"]."</a></h3>\n"
  4. }


Message édité par Djebel1 le 19-05-2006 à 15:33:14
n°1370666
mainjin
Posté le 19-05-2006 à 15:39:13  profilanswer
 

en fait j'ai mal recopié mon code mais j'ai :

Citation :


$sql="SELECT * FROM cat JOIN lien WHERE num_cat=id_cat GROUP BY cat";
$result=mysql_query ($sql);
        $val=mysql_fetch_array ($result);
echo "<h3>".$val["cat"]."</h3>\n";  
          echo "<h3><a href=\"http://".$val["lien"]."\">".$val["lien"]."</a></h3>\n";
            while ($val=mysql_fetch_array ($result))
              {
          echo "<h3>".$val["cat"]."</h3>\n";
          echo "<h3><a href=\"http://".$val["lien"]."\">".$val["lien"]."</a></h3>\n"
}


 
pour que le premier enregistrment de la base puisse apparaitre si je ne fais que la boucle il commence au deuxième.
mais là n'est pas le problème... je n'ai toujours qu'un lien par catégorie et ça m'énerve

n°1370670
flo850
moi je
Posté le 19-05-2006 à 15:40:11  profilanswer
 

en faisant un group by cat , c'est toi qui demande de n'avoir qu'un seul resultat par cat


---------------

n°1370676
Djebel1
Nul professionnel
Posté le 19-05-2006 à 15:42:42  profilanswer
 

>si je ne fais que la boucle il commence au deuxième
bah non pas du tout. Si tu fais que la boucle il commence évidemment au premier. mysql_fetch_array() déplace un pointeur sur les résultats de ta requête. Ce pointeur est au départ placé au début des résultats (et tu peux même le réinitialiser si ça te chante, mais bon là t'en as pas besoin).
 
Tout ça pour dire que, si, la boucle commence au premier résultat. Donc tu vires ce qu'il y a entre le mysql_query et la boucle.
 
Le problème est peut-être tout simplement que ta requête ne renvoit que un seul résultat, non ?
edit : grilled


Message édité par Djebel1 le 19-05-2006 à 15:43:02
n°1370809
mainjin
Posté le 19-05-2006 à 18:38:38  profilanswer
 

Si je ne fais pas un group by cat il réécris la catégorie autant de fois qu'il y a de lien et ça je ne veux pas...
Du style:
Cat1
Lien1
Cat 1
Lien 2
Cat 2
lien 1a
ect...
Ce que je voudrais c'est:  
cat 1
lien1
lien2
Cat 2
lien1a
 
Bref je ne vois pas trop comment améliorer la chose... S'il y a quelqu'un qui voit ....
                 

n°1370812
mainjin
Posté le 19-05-2006 à 18:46:43  profilanswer
 

pour la boucle, Djebel1, t'as raison mais y'a toujours le pb avec plusieurs lien par cat

n°1370824
Djebel1
Nul professionnel
Posté le 19-05-2006 à 19:12:14  profilanswer
 

euh à mon avis ça te renvoie plutôt un truc genre :  
Cat1 | Lien 1
Cat1 | Lien 2
Cat2 | Lien 1
 
donc tu rajoute une clause order by cat_id dans ta requête, ensuite c'est super simple à gérer.


Message édité par Djebel1 le 19-05-2006 à 19:12:37
n°1370833
mainjin
Posté le 19-05-2006 à 19:28:05  profilanswer
 

$sql="SELECT * FROM cat JOIN lien WHERE num_cat=id_cat GROUP BY cat";  
 
tu proposes de faire :
$sql="SELECT * FROM cat JOIN lien WHERE num_cat=id_cat ORDER BY id_cat";  
mais c'est là que j'ai :
Cat1 | Lien 1
Cat1 | Lien 2
Cat2 | Lien 1  
 et ce n'est pas le résultat souhaité...
Je suis sur que c'est super simple mais je n'y arrive pas!Je cale

n°1370853
sielfried
Posté le 19-05-2006 à 20:06:06  profilanswer
 

C'est très bien, ce que ça te renvoie, tu peux pas avoir ton résultat autrement... Tu testes quand $val['id_cat'] change, comme ça tu sais quand ça passe à la prochaine catégorie.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
mood
Publicité
Posté le 19-05-2006 à 20:06:06  profilanswer
 

n°1370864
mainjin
Posté le 19-05-2006 à 20:17:36  profilanswer
 

ben là tu me poses une colle car je ne vois pas du tout comment tester si  
$val['id_cat'] change!
ça serait un truc comme  
if($val['id_cat']!=$val['num_cat'])
... vraiment je ne vois pas

n°1370869
sielfried
Posté le 19-05-2006 à 20:21:59  profilanswer
 

$old_id_cat = -1;
 
while ($val = ...) {
   if ($val['id_cat'] != old_id_cat) {
      // nouvelle cat
   }
   else {
      // même cat
   }
   $old_id_cat = $val['id_cat'];
}


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1370870
Djebel1
Nul professionnel
Posté le 19-05-2006 à 20:22:42  profilanswer
 

Code :
  1. $temp = null;
  2. $x = 0;
  3. while ($val = mysql_fetch_array($result)) {
  4.     if ($x > 0 && $val['id_cat'] != $temp) {
  5.         ...
  6.     }
  7.     $temp = $val['id_cat'];
  8.     $x++;
  9. }


par exemple ...
 
edit : olol le timing :p


Message édité par Djebel1 le 19-05-2006 à 20:23:09
n°1370889
mainjin
Posté le 19-05-2006 à 20:51:50  profilanswer
 

Je me sens vraiment le plus nul du monde car je ne dois pas savoir mettre en place vos scripts...
 
selon Djebel1
Affiche tout en double
 

Citation :


$temp = null;
        $x = 0;
   
      while ($val = mysql_fetch_array($result)) {
   
         if ($x > 0 && $val['id_cat'] != $temp) {
               echo "<h3>".$val["cat"]."</h3>\n";
   echo "<h3><a href=\"http://".$val["lien"]."\">".$val["lien"]."</a></h3>\n";
           }
            $temp = $val['id_cat'];
            $x++;
         }  


 
selon sielfried
ne change rien à l'affichage

Citation :


while ($val = $val=mysql_fetch_array ($result)) {
 
           
   if ($val['id_cat'] != old_id_cat) {
   echo "<h3>".$val["cat"]."</h3>\n";
   echo "<h3><a href=\"http://".$val["lien"]."\">".$val["lien"]."</a></h3>\n";
      // nouvelle cat
   }
   else {
   
     echo "<h3><a href=\"http://".$val["lien"]."\">".$val["lien"]."</a></h3>\n"; // même cat
   }
   $old_id_cat = $val['id_cat'];
   
   }

n°1370891
sielfried
Posté le 19-05-2006 à 20:55:03  profilanswer
 

old_id_cat => $old_id_cat...  
 
$val = $val => $val...


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1370898
mainjin
Posté le 19-05-2006 à 21:10:02  profilanswer
 

oh yessssssssssssssssssssss
merci sielfried!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
t'es trop bon

Citation :


$old_id_cat = -1;
while ($val = $val=mysql_fetch_array ($result)) {
 
           
   if ($val['id_catlien'] != $old_id_cat) {
   echo "<h3>".$val["cat"]."</h3>\n";
   echo "<h3><a href=\"http://".$val["lien"]."\">".$val["lien"]."</a></h3>\n";
      // nouvelle cat
   }
   else {
   
     echo "<h3><a href=\"http://".$val["lien"]."\">".$val["lien"]."</a></h3>\n"; // même cat
   }
   $old_id_cat = $val['id_catlien'];
   
   }


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

  essai de group by (ne fonctionne pas vraiment)

 

Sujets relatifs
GROUP BYComment fonctionne le garbage collector ?
connexion aux users d'un group active directory en vbsGROUP BY
[J2ME Polish] Essai du sample de testGROUP BY ou DISTINCT sur une requête complexe
requête group by & order byafficher ligne group by meme si pas de valeurs
Variable de session qui ne fonctionne pas avec wamp5- TinyMCE > Fonctionne en localhost pas en ligne
Plus de sujets relatifs à : essai de group by (ne fonctionne pas vraiment)


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