Page 1 sur 1

probleme avec un requete et des doublons

Posté : 01 juin 2006, 11:12
par tinou
voila, je fait une requete pour recuperer et afficher des logos de partenaires.
Dans ma table, chaque logo à une catégorie, un theme si vous preferer, et je voudrai les afficher par theme justement. Or vu mon code, je sais que cela ne fonctionne pas mais je vois pas comment faire. PLEASE HELP :?

Voila mon code :
$requete='SELECT * FROM logo ORDER BY categorielogo';
                                  $res=mysql_query($requete);
                                  while($vraires=mysql_fetch_assoc($res))
                                  {
                                          echo'<ul><b><u>'.$vraires['categorielogo'].'</u> :</b></ul>';
                                          $requete2="SELECT * FROM logo where categorielogo=".$vraires['categorielogo']."";
                                          $res2=mysql_query($requete2);
                                          echo'<ul>';
                                          while($vraires2=mysql_fetch_assoc($res2))
                                          {
                                                  echo'<a href="'.$vraires2['lienlogo'].'" class="logo"><image src="'.$vraires2['cheminlogo'].'"></a>&nbsp;&nbsp;&nbsp;';
                                          }
                                          echo'</ul>';
Je sais qu'il est faux, je vois ou sela plante mais je trouve pas comment remedier au probleme.

Voila ma table au cas ou :
idlogo

categorielogo

lienlogo

cheminlogo

Posté : 01 juin 2006, 11:25
par ouckileou
Tu peux faire une seule requête :
sélectionner tous les logos, en les triant sur leur catégorie

Et c'est à l'affichage que tu feras un test pour n'afficher qu'une fois la catégorie

Posté : 01 juin 2006, 11:32
par Ryle
Ce serait bien de détailler un peu plus ton problème que de dire "je sais que cela ne fonctionne pas", genre qu'est ce que ça fait et qu'est ce que ça devrait faire :)

Bon à priori, le soucis doit venir de ta liste de catégorie, tu dois en récupérer autant qu'il y a de lignes dans ta table, d'où probablement tes "doublons". Il te faut pour éviter cela, utiliser la commande sql DISTINCT qui ne ramenera que les éléments différents :

$requete='SELECT DISTINCT(categorielogo) FROM logo ORDER BY categorielogo'; // distinct ne ramene que les enregistrement distinct

$res=mysql_query($requete) or die (mysql_error()); // penser à gérer les erreur sql ;)
while($vraires=mysql_fetch_assoc($res)) 
{ 
      echo'<ul><b><u>'.$vraires['categorielogo'].'</u> :</b></ul>'; 
      
      $requete2="SELECT idlogo, lienlogo, cheminlogo FROM logo where categorielogo=".$vraires['categorielogo']; // pas besoin du ."" à la fin, ca rajoute rien :)
// vaut mieux également spécifier les noms des colonnes que d'utiliser *

      $res2=mysql_query($requete2) or die (mysql_error()); // penser à gérer les erreur sql ici aussi ;)
      echo'<ul>'; 
      while($vraires2=mysql_fetch_assoc($res2)) 
      { 
          echo'<a href="'.$vraires2['lienlogo'].'" class="logo"><image src="'.$vraires2['cheminlogo'].'"></a>&nbsp;&nbsp;&nbsp;'; 
      } 
      echo'</ul>'; 
}

Posté : 01 juin 2006, 11:42
par tinou
cela m'affiche que Département n'est pas connu dans where clause. Il faut savoir que j ia pour l'instant trois catégorie, Département, Ville d'Amiens et test. J'ai 5 logos pour l'instant, dont deux avec Département comme catégorie, deux avec Villed'Amiens et un avec test.
J'aimerai que cela s'affiche dans ce style
Département:
logo1 logo2

Ville d'Amiens:
logo3 Logo4
test
logo5
merci pour votre aide :)

Posté : 01 juin 2006, 11:45
par ouckileou
Mon idée ne t'intéresse pas ?

Tu n'aurais qu'une requête SQL, et moins de code

Avec ton script tu auras nb_cat +1 requêtes SQL...

Posté : 01 juin 2006, 11:47
par tinou
si, toutes les propostions sont bonnes a prendre, mais je comprend pas trop comment on peut faire ca :( . Aurait tu un peu plus d'explication a me donner?? :D Merci de ton aide

Posté : 01 juin 2006, 11:50
par ouckileou

Code : Tout sélectionner

SELECT idlogo, lienlogo, cheminlogo, categorielogo FROM logos ORDER BY categorielogo DESC

Code : Tout sélectionner

TantQue il y a des résultats Faire Si cat_courante est vide Ou cat_courante différente de cat_logo cat_courante <- cat_logo affichage cat_logo FinSi Affichage infos logo FinTantQue

Posté : 01 juin 2006, 11:51
par Ryle
Si ton champ categorielogo est une chaine de caractère, il te faut des apostrophes autour dans ta requête :
where categorielogo='".$vraires['categorielogo'] ."'"; 
Cela dit, la solution d'ouckileou mérite que tu y regardes de plus près. Elle est effectivement moins gourmande en requête et ne nécessite qu'une variable temporaire pour stocker la catégorie précédente :)

TantQue (...) FSi (...) FTQ
Je croyais que le langage sms était interdit sur le forum ? :langue:

Posté : 01 juin 2006, 14:12
par tinou
merci a vous deux je vai tester la solution de oukiléou d abord et on verra si j y arrive.

Posté : 01 juin 2006, 14:19
par ouckileou
TantQue (...) FSi (...) FTQ
Je croyais que le langage sms était interdit sur le forum ? :langue:
Tsss...

:axe:

(j'ai édité pour les puristes :P)

Posté : 01 juin 2006, 14:52
par Ryle
niark niark :)

Tiens sinon juste une petite remarque, ton SI peut se résumer à :

Code : Tout sélectionner

Si cat_courante différente de cat_logo
Dans la mesure où cat_courante est vide lors du premier passage et que cat_logo est renseignée par la base (donc non vide), elles seront bien différentes :)