Probleme requete multi table

Résolu
fred6655 Messages postés 5 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 20 octobre 2005 - 19 oct. 2005 à 14:48
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 - 20 oct. 2005 à 17:20
Bonjour,

J'ai un problème avec une requete sur ma base sql. J'ai 3 tables :
artiste (idartiste, artpseudo), marque (idmarque, marnom), produit
(idartiste, idmarque, pronom).

Un produit peut appartenir à un artiste OU à une marque. Pour sélectionner les fiches je fais donc :

$Resultat = mysql_query("SELECT DISTINCT produit.idproduit,
produit.pronom, produit.idartiste, produit.idmarque, artiste.idartiste,
artiste.artpseudo, marque.idmarque, marque.marnom FROM produit,
artiste, marque WHERE produit.idartiste LIKE artiste.idartiste
AND produit.idartiste>'0' OR produit.idmarque LIKE marque.idmarque
AND proetat='1' AND produit.idmarque>'0' ORDER BY pronom");



Le problème est que les produits des artistes apparaissent autant de
fois qu'il y a de marque et inversemment pour les produits des marques.
Pour être plus clair, s'il y a 10 marques, un produit d'artiste va
apparaitre 10 fois. Dois-je faire 2 requêtes pour éviter ce problème ?
Et si oui comment ensuite trier l'ensemble des 2 requêtes par le nom du
produit (pronom) ?



Merci.

FRED

7 réponses

aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
19 oct. 2005 à 16:01
salut

tu peux faire deux requetes en une en utilisant UNION, et trier le tout !

SELECT ...


FROM produit, artiste


WHERE...


UNION
SELECT ...
FROM Produit, marque
WHERE ...
ORDER BY Produit
3
fred6655 Messages postés 5 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 20 octobre 2005
19 oct. 2005 à 16:25
Ca marche merci ! Etrangement d'ailleurs, parce que j'avais déjà essayé union sans resultat... J'avais sans fait une erreur de syntaxe à ce moment là.

FRED
0
fred6655 Messages postés 5 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 20 octobre 2005
20 oct. 2005 à 11:46
Maintenant le problème est qu'il me met tous les enregistrements
idmarque dans idartiste de sorte que lorsque je fais echo
$result[idmarque], je n'ai rien...Mais lorsque je fais afficher les
idartistes il me mets même les identifiants marque...

Lorsqu'on utilise union, faut-il employer une autre syntaxe pour l'affichage des résultat ?



Merci

FRED
0
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
20 oct. 2005 à 12:15
oui c'est normal, en fait les ID se trouvent tous dans la meme colonne, que ca soit une marque ou un artiste. c'est le resulta du UNION...

pour eviter cela, tu peux modifier tes select :

SELECT idproduit, pronom, idArtiste, idMarque, 0,0


FROM produit, artiste


WHERE...


UNION idproduit, pronom, 0,0, idMarque
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
20 oct. 2005 à 12:18
.. suite !
bon post a été coupé :(
donc :
SELECT idproduit, pronom, idArtiste, artPseudo, 0,''


FROM produit, artiste


WHERE...


UNION
SELECT idproduit, pronom, 0,'', idMarque, marNom
FROM produit, marque
...

ainsi les produits qui sont rattachés a un artiste auront 0 comme idMarque, et ceux qui sont rattachés a une marque auront 0 comm idArtiste
0
fred6655 Messages postés 5 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 20 octobre 2005
20 oct. 2005 à 15:15
Alors je dois mal m'y prendre parce que l'idmarque n'est toujours pas trouvé. J'utilise ceci :
SELECT produit.idproduit, produit.pronom, produit.idartiste, artiste.idartiste, 0, 0
FROM produit, artiste
WHERE produit.idartiste LIKE artiste.idartiste
UNION
SELECT produit.idproduit, produit.pronom, 0, 0, produit.idmarque, marque.idmarque
FROM produit, marque
WHERE produit.idmarque LIKE marque.idmarque

Et pour les produits correspondant aux marques j'ai : <!--StartFragment --> Undefined index: idmarque que je mette 0 ou '' c'est pareil...

Qu'est-ce qui cloche ?

Merci
FRED
0
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
20 oct. 2005 à 17:20
es tu sur du nom du champs dans ta base de données ?

verifie tout tes nom de table et de champs
0
Rejoignez-nous