Requete sql pour affichage sans redondance

Résolu
zineomar Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
zineomar Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   2
 
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
 
Utilises DISTINCT.
0
zineomar Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   2
 
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   Statut Membre Dernière intervention  
 
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 2435 Date d'inscription   Statut Membre Dernière intervention   318 > Utilisateur anonyme
 
Oui c'est ce que je pense aussi. :)
0
EminoMeneko Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   318
 
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   Statut Membre Dernière intervention   2
 
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   Statut Membre Dernière intervention  
 
As-tu testé ma proposition ?
0
zineomar Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   2 > Utilisateur anonyme
 
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 2435 Date d'inscription   Statut Membre Dernière intervention   318
 
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