8792 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai 3 tables comme ceci

La table des noms des clients

a écrit :
tab1 composé de :
- id_tab (index primaire)
- tab1_nom
- id_trt (marqueur)


La table des adresses des clients

a écrit :
tab2 composé de :
- id_adresse (index primaire)
- id_tab
- tab2_adresse
- id_trt (marqueur)


La table des adresses des commandes

a écrit :
tab3 composé de :
- id_commande (index primaire)
- id_tab
- tab3_quantite
- id_trt (marqueur)


Le marqueur permet de définir le niveau de traitement de l'information. Il prend une valeur allant de 0 à 5.

Je veux savoir pour un même id_tab le nombre d'enregistrements de tab1, tab2, tab3 dont la valeur de id_trt est comprise entre 2 et 4.

J'étais parti sur ceci :

SELECT tab1.id_tab, tab1_nom, count(tab2.id_tab) AS 'Adresse', count(tab3.id_tab) AS 'Commande' 
FROM tab1 
LEFT OUTER JOIN tab2 
ON tab1.id_tab = tab2.id_tab 
AND tab2.id_trt 
BETWEEN 2 
AND 4 
LEFT OUTER JOIN tab3 
ON tab1.id_tab = tab3.id_tab 
AND tab3.id_trt 
BETWEEN 2 
AND 4



Mais comment faire mon group by, ce n'est pas possible.

J'ai alors pensé à faire comme ceci :

$req = "SELECT tab1.id_tab, tab1_nom, count(tab2.id_tab) AS 'Adresse' 
FROM tab2 
LEFT OUTER JOIN tab1 
ON tab1.id_tab = tab2.id_tab 
WHERE tab2.id_trt 
BETWEEN 2 
AND 4 
GROUP BY tab2.id_tab"; 
$resadr=$MySql->queryAllRecords($req); 
$req = "SELECT tab1.id_tab, tab1_nom, count(tab3.id_tab) AS 'Tiers'
FROM tab3 
LEFT OUTER JOIN tab1 
ON tab1.id_tab = tab3.id_tab 
WHERE tab3.id_trt 
BETWEEN 2 
AND 4 
GROUP BY tab3.id_tab"; 
$restiers=$MySql->queryAllRecords($req); 
$result = array_merge($resadr,$restiers); 



Mais là encore le résultat n'est pas correct.

J'espère avoir été assez clair.

Comment arriver au résultat que je souhaite avec une requête ?

Est-ce possible ?

Merci d'avance
Administrateur
Hello,


Comme tu as pu le lire dans le sujet d'Annonce de ce salon, le but du forum Alsacréations n'est pas de répondre à des questions portant sur vos premiers pas en PHP, ou l'apprentissage des technologies serveurs en général, mais bien des interactions entre les langages serveurs et les Standards.

Je ne vais pas fermer ce sujet car des réponses pourraient t'être apportées, mais je préfère te signaler qu'il ne faut peut-être pas t'attendre à un miracle et qu'il serait préférable de consulter un forum dédié à PHP Smiley cligne
Salut,

Peut-être avec un UNION, mais c'est pas propore.. faudrait voir la documentation MySQL s'ils préconisent mieux pour ça !

A+
Raphael a écrit :
Hello,


Comme tu as pu le lire dans le sujet d'Annonce de ce salon, le but du forum Alsacréations n'est pas de répondre à des questions portant sur vos premiers pas en PHP, ou l'apprentissage des technologies serveurs en général, mais bien des interactions entre les langages serveurs et les Standards.

Je ne vais pas fermer ce sujet car des réponses pourraient t'être apportées, mais je préfère te signaler qu'il ne faut peut-être pas t'attendre à un miracle et qu'il serait préférable de consulter un forum dédié à PHP Smiley cligne



Pas bien compris, j'ai fait une recherche sur "mysql" et j'ai trouvé ce forum à cette rubrique. PHP n'a rien à voir avec cela, il exécute la requête mais c'est tout.

La soluce est :

SELECT tab1.id_tab, tab1_nom, count(tab2.id_tab) AS 'Adresse', count(tab3.id_tab) AS 'Commande' 
FROM tab1 
LEFT OUTER JOIN tab2 
ON tab1.id_tab = tab2.id_tab 
AND tab2.id_trt 
BETWEEN 2 
AND 4 
LEFT OUTER JOIN tab3 
ON tab1.id_tab = tab3.id_tab 
AND tab3.id_trt 
BETWEEN 2 
AND 4
WHERE tab2.id_trt 
BETWEEN 2 
AND 4
OR tab3.id_trt 
BETWEEN 2 
AND 4
BROUP BY tab1.id_tab


Merci à tous.
Administrateur
lodan a écrit :
Pas bien compris, j'ai fait une recherche sur "mysql" et j'ai trouvé ce forum à cette rubrique. PHP n'a rien à voir avec cela, il exécute la requête mais c'est tout.

Là c'est moi qui n'ai pas tout compris : PHP ou pas, quel est le rapport avec les Standards W3C ?

As-tu bien lu le sujet d'annonce avant de poster dans ce salon ?
Modifié par Raphael (28 Mar 2007 - 13:25)