probleme avec un requete et des doublons

Eléphant du PHP | 86 Messages

01 juin 2006, 11:12

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
Comme dit le proverbe chinois:"Si tu parles a tes chaussons.....C'est que tu es le Roi des C..." :D

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

01 juin 2006, 11:25

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 juin 2006, 11:32

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>'; 
}

Eléphant du PHP | 86 Messages

01 juin 2006, 11:42

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 :)
Comme dit le proverbe chinois:"Si tu parles a tes chaussons.....C'est que tu es le Roi des C..." :D

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

01 juin 2006, 11:45

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

Eléphant du PHP | 86 Messages

01 juin 2006, 11:47

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
Comme dit le proverbe chinois:"Si tu parles a tes chaussons.....C'est que tu es le Roi des C..." :D

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

01 juin 2006, 11:50

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
Modifié en dernier par ouckileou le 01 juin 2006, 14:20, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 juin 2006, 11:51

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:

Eléphant du PHP | 86 Messages

01 juin 2006, 14:12

merci a vous deux je vai tester la solution de oukiléou d abord et on verra si j y arrive.
Comme dit le proverbe chinois:"Si tu parles a tes chaussons.....C'est que tu es le Roi des C..." :D

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

01 juin 2006, 14:19

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

:axe:

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 juin 2006, 14:52

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 :)