sandrinoo Posté 24 Février 2012 Posté 24 Février 2012 Bonjour à toutes et à tous, voilà, j'ai un petit souci où je bloque depuis ce matin : Je fais une requete sql pour afficher tous les produits classés par ordre alphabétique d'un dossier : <?php mysql_connect("$serv", "$utili", "$pass");mysql_select_db("$db");$reponse = mysql_query("SELECT * FROM mybd WHERE dossier='dossier2' ORDER BY produit LIMIT 10"); while ($donnees = mysql_fetch_array($reponse) ){echo $donnees['produit'];}mysql_close();?> Les fiches s'affichent bien mais le problème est que certaines fiches s'affichent de manière redondantes : produit A produit B produit B produit B produit B produit C produit C C'est normal du fait de la BD car certaines valeurs du champs 'produit' sont identiques et se retouvent plusieurs fois. J'ai bien essayé de mettre un DISTINCT après le select mais sans succès. Quelqu'un aurait-il une idée pour supprimer à l'affichage ces doublons (mais pas les supprimer en BD) ? sandy
Gregor Posté 24 Février 2012 Posté 24 Février 2012 Bonjour, Avez-vous essayé GROUP BY ? SELECT * FROM mybd WHERE dossier = 'dossier2' GROUP BY produit ORDER BY produit LIMIT 10 Ca élimine tous les doublons de produit et ça prend en compte le premier produit dans votre liste (il faut donc peaufiner en insérant, par exemple, un ORDER BY date, id, etc.). Si ça ne marche pas : pouvez-vous nous donner davantage d'informations sur votre BD (les colonnes et quelques exemples de fiches produits).
sandrinoo Posté 24 Février 2012 Auteur Posté 24 Février 2012 (modifié) Gregor un grand merci, c'était exactement ça ! Ton code fonctionne à merveille. Et si Gregor (sans abuser) je voulais retirer des résultats 'produits' affichés le produit de la page même ? Je ne sais pas si je suis clair : en fait soustraire la variable de la page pour ne pas que le produit (variable) s'affiche (mais tous les autres produits continuant à safficher bien sûr) ? Quel ligne de code faut-il rajouter ? Cela m'enlèverais une épine du pied pour ce week-end ? Modifié 24 Février 2012 par sandrinoo
Gregor Posté 24 Février 2012 Posté 24 Février 2012 (modifié) J'avoue que j'ai assez mal compris votre demande. Vous me demandez d'exclure un résultat de la liste, non ? Dans ce cas, il suffit de modifier le WHERE : SELECT * FROM mybd WHERE dossier = 'dossier2' AND produit <> '$variable_produit' GROUP BY produit ORDER BY produit LIMIT 10 Dans ce cas, les produits A,B,C s'afficheront jusqu'à K. (Exemple : si le produit affiché est C.001, alors ne sera affiché que A, B, D, E, F, G, H, I, J et K car le limit stipule bien les 10 premiers valides. Si vous ne voulez pas du K (car techniquement, il est 11e), alors il faut remplacer le 10 par une variable qui vaudra 10 en temps normal, et 9 si on est dans la page produit et que ce produit aurait dû normalement apparaître sur la liste). Ou si vous voulez quand même voir un produit identique, mais le second dans la liste : SELECT * FROM mybd WHERE dossier = 'dossier2' AND id_produit <> '$variable_id_produit' GROUP BY produit ORDER BY produit LIMIT 10 Dans ce cas, les produits A,B,C s'afficheront jusqu'à J. (Exemple : si le produit affiché est A.001, alors A.001 est exclu de la liste mais à la place, il y aura A.002 en tête de liste). Modifié 24 Février 2012 par Gregor
sandrinoo Posté 25 Février 2012 Auteur Posté 25 Février 2012 (modifié) Et bien Gregor, je viens de tester ta 1ere solution et encore une fois dans le mille ! Tu as tout à fait compris : C'est exactement ce que je voulais. Tu viens de me faire découvrir le "GROUP BY" et le "<>" que je ne connaissais pas. Mais il est vrai que mes connaissances en php/sql sont sommaire. Je te remercie vivement pour avoir pris le temps de m'aider, et bon samedi soir à toi... Sandy. Modifié 25 Février 2012 par sandrinoo
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant