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
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
A voir également:
- Requete sql pour affichage sans redondance
- Blob sql ✓ - Forum Webmastering
- Récupération serveur sql - Télécharger - Gestion de données
- Affichage double ecran - Guide
- Problème affichage le bon coin ✓ - Forum Virus
- Windows 11 affichage classique - Guide
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
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
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
Utilisateur anonyme
21 juin 2008 à 21:11
21 juin 2008 à 21:11
Utilises DISTINCT.
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
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
Je boucle "obssessionnellement" sur toutes les astuces sql, php sans trouver une solution "propre" et qui tienne la route.
CORDIALEMENT
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
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).
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).
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
22 juin 2008 à 00:48
Oui c'est ce que je pense aussi. :)
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
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... :)
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... :)
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
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
MERCI
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
22 juin 2008 à 00:29
As-tu testé ma proposition ?
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
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
$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
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
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...
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...