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 -
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
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:
- Requete sql pour affichage sans redondance
- Affichage double ecran - Guide
- Windows 11 affichage classique - Guide
- Problème affichage fenêtre windows 10 - Guide
- Logiciel sql - Télécharger - Bases de données
- Problème affichage page internet google chrome ✓ - Forum Google Chrome
4 réponses
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
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
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
Je boucle "obssessionnellement" sur toutes les astuces sql, php sans trouver une solution "propre" et qui tienne la route.
CORDIALEMENT
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... :)
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... :)
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
MERCI
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
$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
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...
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...