Requete sql pour affichage sans redondance

Résolu/Fermé
zineomar Messages postés 5 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 23 juin 2008 - 21 juin 2008 à 21:10
zineomar Messages postés 5 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 23 juin 2008 - 23 juin 2008 à 21:31
Bonjour,

avec une requete sql SELECT j'obitens par exemple

artiste toile
---------------
van gogh iris
van gogh champ rouge
van gogh lilas
matisse indiennes
matisse indiens

comment faire une requête pour obtenir un affichage comme ceci

artiste toile
-------------------
van gogh iris
champ rouge
lilas
matisse indiennes
indiens
A voir également:

4 réponses

zineomar Messages postés 5 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 23 juin 2008 2
23 juin 2008 à 21:31
Merci à tous : problème résolu grâce au forum "commentcamarche"

voici la solution finale :


$connexion = mysql_connect("localhost","root","") or die ("echec connexion");
$db = mysql_select_db("reda",$connexion) or dir ("echec base de données");
$req = "select * from tableaux, artistes Where tableaux.id_peintre=artistes.id_peintre ORDER BY artistes.nom_artiste";
$resultat = mysql_query($req) or die ("echec requet");



echo "resultats trouvées : ".mysql_num_rows($resultat)."<br><br>";

$curr_artiste = "";

While($row = mysql_fetch_array($resultat)){
$caption=$row['nom_artiste'];

if ( $curr_artiste != $caption ){

$curr_artiste = $caption;
echo $row[nom_artiste].'<br>';

}
echo $row['nom_tablau'].'<br>' ;
}

?>

Affichage à l'écran :

resultats trouvées : 5

MATISSE
M1
M2
M3

VAN
V2
V1
1
Utilisateur anonyme
21 juin 2008 à 21:11
Utilises DISTINCT.
0
zineomar Messages postés 5 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 23 juin 2008 2
22 juin 2008 à 00:35
merci, mais DISTINCT isole un enregistrement correspondant aux modalités de la requête et ne vas plus afficher les autres toiles de l'artiste. Le but du jeu est d'afficher tout le catalogue sans omettre aucune toile mais sans répéter sans arrêt la même rubrique (ici c'est le nom de l'artiste) déjà affichée une première fois.

Je boucle "obssessionnellement" sur toutes les astuces sql, php sans trouver une solution "propre" et qui tienne la route.
CORDIALEMENT
0
Utilisateur anonyme > zineomar Messages postés 5 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 23 juin 2008
22 juin 2008 à 00:41
En fait du veux faire un GROUP BY sur nom d'artiste et concaténer les noms de toile ?
Si tel est le cas, je crois que c'est impossible en SQL, mais à la rigueur c'est le genre de chose à traiter à l'affichage final (php ou autre).
0
EminoMeneko Messages postés 2434 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 23 mai 2018 318 > Utilisateur anonyme
22 juin 2008 à 00:48
Oui c'est ce que je pense aussi. :)
0
EminoMeneko Messages postés 2434 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 23 mai 2018 318
21 juin 2008 à 21:13
Ummm ça fait un bout de temps que j'ai pas fait de requete donc je vais juste faire un essai pour que tu trouve un peu d'inspiration.

SELECT * FROM artistes, toiles ORDER BY artiste

En tout cas toi tu dois reformater l'affichage avec HTML par exemple. Je sais pas si c'est pour un site mais bon... :)
0
zineomar Messages postés 5 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 23 juin 2008 2
22 juin 2008 à 00:26
en réalité c'est un cas d'école auquel je suis confronté sans y trouver de réponses. Il y a deux tables, une table artiste (id, nom et autres informations) et une table toile (id, nom, description, prix et autres champs).Ces deux tables ont en commun un id_peintre. La requête se fait en jointure simple avec un order sur le nom des artistes. Jusque là pas de problème. Le problème est d'ordre esthétique. Comment afficher tous les résultats de la requête sans que le nom de l'artiste ne soit répété à chaque fois. J'ai essayé de faire des requêtes imbriquées sans résultat. J'ai essayé avec dreamweaver de faire des régions répétées imbriquées mais il refuse d'accepter le code d'imbrication. J'ai essayé toutes les solutions connues par moi même en vain sql, php, html en vain. Mon savoir est limitée mais je dois répondre à cette question comment ne pas laisser apparaitre le résultat d'une requête s'afficher avec redondance dans toutes les lignes. J'ai trouvé une solution en introduisant une boucle qui lance une requête mais techniquement elle est catastrophique car elle va générer pour chaque artiste une requête. Le but du jeu n'est pas de sauter le serveur ou d'occuper la bande passante inutilement.
MERCI
0
Utilisateur anonyme > zineomar Messages postés 5 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 23 juin 2008
22 juin 2008 à 00:29
As-tu testé ma proposition ?
0
zineomar Messages postés 5 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 23 juin 2008 2 > Utilisateur anonyme
23 juin 2008 à 18:14
Vous avez effectivement bien saisi le problème. Il s'agit de trouver l'astuce pour manipuler et afficher une partie des tableaux renvoyée par query sans passer par un DISTINCT ou introduire une variable ou un if conditionnel avec une variable dans la requête


$connexion = mysql_connect("localhost","root","") or die ("echec connexion");
$db = mysql_select_db("reda",$connexion) or dir ("echec base de données");
$req = "select * from tableaux, artistes Where tableaux.id_peintre=artistes.id_peintre ORDER BY artistes.nom_artiste";
$resultat = mysql_query($req) or die ("echec requet");



echo "resultats trouvées : ".mysql_num_rows($resultat)."<br><br>";

$lign = mysql_fetch_array($resultat,MYSQL_NUM);
while($lign = mysql_fetch_array($resultat,MYSQL_NUM))
{
echo $lign[0]." ".$lign[1]." ".$lign[2]." ".$lign[4]."<br>";
}


la réponse semble venir d'un autre endroit du forum : http://www.commentcamarche.net/forum/affich 2923140 tableau sql lecture php
Je vais essayer cette formule

en tous les cas merci. Je reste preneur d'une solution pour répondre "correctement propre" à une question qui m' a été posée. Merci

zineomar
0
EminoMeneko Messages postés 2434 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 23 mai 2018 318
22 juin 2008 à 00:47
Han ! xD
PHP le fait sans problèmes !
Faut juste réfléchir un minimum, ce que je suis difficilement en mesure de faire dans l'immédiat... :P
y'a une jointure à faire un peu comme ça (je peut me planter dans la syntaxe vu que j'ai pas testé et que je rappel que ça fait un bail que j'ai pas fait de SQL)

SELECT * FROM artistes AS art, toiles AS t WHERE t.artiste_id=art.artiste_id


Aussi regarde du côté de la boucle foreach...
0