Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[MYSQL] Select de 3 tables

8 réponses
Avatar
Nicolas
Bonsoir,

J'ai un probleme de select sur 3 tables différentes, en fait je désire
suivre des expéditions et souhaite faire ressortir dans un tableau ceci :

Code (table matériel)
Désignation (table matériel)
SN (table stock)
Quantité (table expeditions)
Envoyé le (table expeditions - c'est le champ date)

________________________
Mes 3 tables :

Table matériel :
---------------
code - categorie - marque - designation

Table stock :
-------------
id_stock - code - sn - statut - transit - localisation

Table expeditions :
--------------------
id - date - id_stock - code - quantite - expediteur - destinataire - statut

Le champ qui lie ces 3 tables est le champ CODE.

Voici ma requête qui fonctionne en ne sélectionnant que 2 tables, mais il me
manque le SN :

SELECT * FROM expeditions,materiel where expeditions.code=materiel.code and
expeditions.destinataire='$_SESSION[login]' and expeditions.statut='1'

Le and expeditions.destinataire='$_SESSION[login]' and
expeditions.statut='1' est essentiel pour ce que je veux afficher.

J'ai donc essayé de sélectionner mes 3 tables :
SELECT * FROM expeditions,materiel,stock where
expeditions.code=materiel.code=stock.code and
expeditions.destinataire='$_SESSION[login]' and expeditions.statut='1'

Mais ça me sort n'importe quoi.

Merci infiniment pour votre aide

Nicolas

8 réponses

Avatar
Patrick Mevzek
Le Sat, 08 Jan 2005 22:49:32 +0100, Nicolas a écrit :

SELECT * FROM expeditions,materiel where expeditions.code=materiel.code
and expeditions.destinataire='$_SESSION[login]' and
expeditions.statut='1'



La syntaxe standard serait plutot:
SELECT * FROM expeditions INNER JOIN materiel ON
(expeditions.code=materiel.code) WHERE
expiditions.destinataire='$_SESSION[login]' and expeditions.statut=1;

(enfin faudra corriger le $_SESSION[login] sinon vous êtes a priori
vulnérable à une injection SQL)

Le and expeditions.destinataire='$_SESSION[login]' and
expeditions.statut='1' est essentiel pour ce que je veux afficher.

J'ai donc essayé de sélectionner mes 3 tables : SELECT * FROM
expeditions,materiel,stock where
expeditions.code=materiel.code=stock.code and
expeditions.destinataire='$_SESSION[login]' and expeditions.statut='1'



Idem, essayez plutot la syntaxe standard:
SELECT * FROM expeditions
INNER JOIN materiel ON (expeditions.code=materiel.code)
INNER JOIN stock ON (expeditions.code=stock.code)
WHERE expeditions.destinataire='$_SESSION[login]' AND
expeditions.statut=1;

--
Patrick Mevzek . . . . . . Dot and Co (Paris, France)
<http://www.dotandco.net/> <http://www.dotandco.com/>
Dépêches sur le nommage <news://news.dotandco.net/dotandco.info.news>
Avatar
Nicolas
"Patrick Mevzek" a écrit dans le message de
news:

Idem, essayez plutot la syntaxe standard:
SELECT * FROM expeditions
INNER JOIN materiel ON (expeditions.code=materiel.code)
INNER JOIN stock ON (expeditions.code=stock.code)
WHERE expeditions.destinataire='$_SESSION[login]' AND
expeditions.statut=1;



Merci beaucoup Patrick pour votre aide, je vais essayer cette après-midi.

(enfin faudra corriger le $_SESSION[login] sinon vous êtes a priori
vulnérable à une injection SQL)



Je pense que c'est bon, j'attribue moi-même $_SESSION[login] uniquement
quand la personne est identifiée, il ne provient pas d'un $_POST.

Merci, bon WE
Nicolas
Avatar
Nicolas
"Patrick Mevzek" a écrit dans le message de
news:
Le Sat, 08 Jan 2005 22:49:32 +0100, Nicolas a écrit :



Je viens d'essayer :

SELECT * FROM expeditions
INNER JOIN materiel ON (expeditions.code=materiel.code)
INNER JOIN stock ON (expeditions.code=stock.code)
WHERE expeditions.destinataire='houilles' AND expeditions.statut='1'

Le probleme est qu'un champ STATUT est aussi présent dans la table stock et
même en faisant Where expeditions.statut='1' il me prend aussi le champ
stock.statut d'apres le resultat que j'ai dans phpmyadmin.

Comment faire sans renommer celui de stock ?

Merci d'avance
Nicolas
Avatar
Nicolas
"Nicolas" a écrit dans le message de news:
41e51528$0$29905$

Le probleme est qu'un champ STATUT est aussi présent dans la table stock


et
même en faisant Where expeditions.statut='1' il me prend aussi le champ
stock.statut d'apres le resultat que j'ai dans phpmyadmin.



Bon en fait ça ne vient pas de ce champ que je viens de renommer , j'ai
toujours le probleme.

Bref dès que je sélectionne 3 tables il m'affiche n'importe quoi , une
petite idée ?

merci !
Avatar
Jacques Caron
Salut,

On Sat, 8 Jan 2005 22:49:32 +0100, Nicolas wrote:

J'ai donc essayé de sélectionner mes 3 tables :
SELECT * FROM expeditions,materiel,stock where
expeditions.code=materiel.code=stock.code and
expeditions.destinataire='$_SESSION[login]' and expeditions.statut='1'



Le problème c'est "expeditions.code=materiel.code=stock.code". Ca ne veut
pas dire du tout ce que vous pensez. Il faut écrire
expeditions.code=materiel.code and materiel.code=stock.code (par exemple)
ou utiliser deux join on sur ces clauses.

Jacques.
--
Interactive Media Factory
Création, développement et hébergement
de services interactifs: SMS, SMS+, Audiotel...
http://www.imfeurope.com/
Avatar
Nicolas
ça ne fonctionne toujours pas , je ne sais pas pourquoi il me sélectionne
bien ce qu'il faut mais me les répètes plusieurs fois :-(

"Jacques Caron" a écrit dans le message de news:

Salut,


SELECT * FROM expeditions,materiel,stock where
expeditions.code=materiel.code and materiel.code=stock.code and
expeditions.destinataire='houilles' and expeditions.statut='1'
Avatar
Nicolas
"Nicolas" a écrit dans le message de news:
41e05571$0$10274$
Bonsoir,

J'ai un probleme de select sur 3 tables différentes, en fait je désire
suivre des expéditions et souhaite faire ressortir dans un tableau ceci :



Désolé pour le bruit, c'etait un probleme de tables à mon niveau, tout
n'était pas bien enregistré :-/

merci à tous
Nicolas
Avatar
Nicolas
"Jacques Caron" a écrit dans le message de news:


Le problème c'est "expeditions.code=materiel.code=stock.code". Ca ne veut
pas dire du tout ce que vous pensez. Il faut écrire
expeditions.code=materiel.code and materiel.code=stock.code (par exemple)
ou utiliser deux join on sur ces clauses.




Excusez-moi pour le bruit, la requête est bonne, c'était un problème dans
les jointures, je n'avais pas choisi le bon champ pour les faire.

Alors maintenant ma question va être, comment lier la table expedition avec
materiel par le champ id_stock et stock avec materiel par le champ CODE ?
(je connais pas la syntaxe à taper) mais sans JOIN, je prefere genre WHERE
expeditions.code = materiel.code.

Réunir donc mes 3 tables ainsi :

EXPEDITIONS - MATERIEL - STOCK
id_stock - id_stock/code - code

merci d'avance !
Nicolas