Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Programmation.php : mysql et requetes imbriques

Posté par smorico (page perso, ) le 10 novembre 2004
Bonjour,



J'ai un petit souci avec mysql. J'ai trois tables :

Produit avec Prod_ID et Prod_Nom

Societe avec Societe_ID et Societe_Nom

Et une table SocieteProd qui permet de savoir quel société a quel produit.

SocieteProd :

SocieteProd_ID

Produit_ID

Societe_ID



Mon programme (en php) permet d'attribuer un ou plusieurs produits à une société. Ce que j'aimerais faire, c'est que lorsque l'utilisateur ajoute un produit, seul les produits que la société ne possède pas soient présentés dans la liste. J'avais donc pensé à une requete imbriqué du style :



SELECT Prod_Nom FROM Produit WHERE Prod_ID NOT IN (SELECT Prod_ID FROM SocieteProd WHERE SocieteID = $societe_id)



Le Pb c'est que ça ne fonctionne pas sous mysql ! mysql ne sais apparemment pas gérer les requetes imbriqués....



Ma question est donc la suivante : Est-ce possible de réaliser ce type de requete uniquement avec des jointures (LEFT JOIN etc...)???

Sinon voyez vous une autre solution ??

> Lire le message (6 commentaires, moyenne: 1,7).  

Vous avez demandé le commentaire #496080.

EXCEPT ?

Posté par idiotduvillage () le 10/11/2004 à 17:46. (lien). Évalué à 2.

Hello,

Je ne sais pas si MySQL (dans la version que tu utilises) gère le mot clé EXCEPT (en fait j'utilise PostgreSQL), mais tu peux toujours essayer un:

SELECT prod_id FROM produit EXCEPT SELECT prod_id FROM societeprod WHERE societeid=$societe_id; (1)

Avec cette requête on devrait donc obtenir les identifiants des produits uniquement.
Je suppose donc qu'il faudrait faire une jointure du style

SELECT P.prod_nom
FROM produit AS P,
(SELECT prod_id FROM produit EXCEPT SELECT prod_id FROM societeprod WHERE societeid=$societe_id) AS P1
WHERE P.prod_id=P1.prod_id;

Cela dit, si ça ne gère pas non plus la sous-requête de cette forme, ce n'est pas mieux comme proposition.

Donc si tu veux uniquement les noms de produits en une seule requête "simple", il suffirait de remplacer prod_id par pro_nom dans (1) mais cela pourrait poser des problèmes de performances si les tables ont de très nombreux enregistrement et/ou si cette requête est très souvent utilisée !

Je suis peut-être aussi totalement à côté de la plaque (ça m'arrive ... assez souvent !).