Jump to content

Eliminer affichage redondant


sandrinoo

Recommended Posts

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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 ?

Edited by sandrinoo
Link to post
Share on other sites

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

Edited by Gregor
Link to post
Share on other sites

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.

Edited by sandrinoo
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...