Php/mysql requete plusieurs tables et bases

fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006 - 7 oct. 2005 à 11:52
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 - 7 oct. 2005 à 19:33
Bonjour,

j'aimerais savoir comment faire pour requeter sur plusieurs tables et bases, je m'explique :

BASE 1:
Requête 1 : Sélection des CODES COMMUNES selon critère utilisateur sur la TABLE 1

Requete 2 : Sélection des CODES ACTIVITES selon critère utilisateur sur la TABLE 2
(jusque là ça va)

BASE 2
Requête 3 : Sélection des CODES ACTIVITES et des CODES COMMUNES dans ma table 3 selon les 2 premières requetes afin d'obtenir les EFFECTIFS PAR COMMUNE ET ACTIVITES.

Merci d'avance pour votre aide !!!!

Voici une partie de mon code (je sais pas si c'est très utile mais bon..)

Requête 1 :
//SELECTION DU TERRITOIRE SOUHAITE ET LA LISTE DU TERRITOIRE
$query_req = mysql_query("select distinct $table_serveur.TYPE_ELT,
$table_serveur.CODE_GROUPE,
$table_serveur.CODE_REGROUPT as CODE_REGROUPT,
$tabled_serveur.NOM_REGROUPT,
$tabled_serveur.CODE_REGROUPT as CODE_REGROUPTb
from $table_serveur, $tabled_serveur
where $table_serveur.CODE_REGROUPT='$territoire' and
$tabled_serveur.CODE_REGROUPT=$table_serveur.TYPE_ELT and
$table_serveur.CODE_GROUPE='$CODE_GROUPEB'");


if (!$query_req)
{
die('Requête A invalide : ' . mysql_error());
}
if ($query_req)
{ echo "OK REQ A";}

while ($datareq = mysql_fetch_array($query_req))
{
$query_reqb=mysql_query("select CODE_ELT, CODE_GROUPE from $tableb_serveur where $tableb_serveur.CODE_GROUPE='$datareq[CODE_GROUPE]'");
}
if (!$query_reqb)
{ die('Requête B invalide : ' . mysql_error()); exit();}
if ($query_reqb)
{ echo "OK REQ B";}

Requête 2 :

//SELECTION DES CODES NAF CORRESPONDANT A LA DEMANDE DU CODE

$query_reqnaf = mysql_query(' select NAF700, '.$VALEUR_CD.', '.$act.'
from '.$tablec_serveur.'
where '.$act.'='.$VALEUR_CD.' ');

if (!$query_reqnaf)
{
die('Requête A NAF invalide : ' . mysql_error());
}
if ($query_reqnaf)
{ echo "OK REQ A NAF";}

Requete 3 (pas bonne) :

//SELECTION DANS BASE 2
if (!mysql_select_db($database_local, $local))
{
echo "ERREUR BASE LOCAL";
exit();
}
while ($datareqb = mysql_fetch_array($query_reqb))
{
$query_reqnafb=mysql_query('select distinct ANNEE, NAF700, DECOM, EMP_T_TOTA
from '.$table_local.'
where DECOM='.$datareqb[CODE_ELT].'
GROUP BY NAF700, ANNEE
ORDER BY NAF700, ANNEE');
}
while ($datareqnafb = mysql_fetch_array($query_reqnafb))
{
$query_reqnafc=mysql_query('select distinct ANNEE, NAF700, DECOM, SUM(EMP_T_TOTA) as somme
from '.$table_local.'
where NAF700="'.$datareqnafb[NAF700].'"
GROUP BY NAF700, ANNEE
ORDER BY NAF700, ANNEE');
}

10 réponses

fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
7 oct. 2005 à 14:29
j'ai essayé un truc comme ça et ça marche pas non plus !!!! J'ai beau tourner dans tous les sens j'y arrive pas !!!
Quelqu'un a une idée pour ça ??? merci je désespère !!!

while ($datareqb = mysql_fetch_array($query_reqb))
{
while ($datareqnaf = mysql_fetch_array($query_reqnaf))
{
$query_reqnafb=mysql_query('select ANNEE, NAF700, DECOM, SUM(EMP_T_TOTA) as somme
from '.$table_local.'
where NAF700="'.$datareqnaf[NAF700].'" and DECOM='.$datareqb[CODE_ELT].'
GROUP BY NAF700, ANNEE
ORDER BY NAF700, ANNEE');
}
}
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
7 oct. 2005 à 14:46
Fred...

pourrais tu essayer de simplifier ton pb et donner un exemple "bete"?

parce que là, perso, ça me donne mal à la tete rien que de lire ton truc ;)
-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
7 oct. 2005 à 15:02
Dac !!!
Alors en faite, j'ai 3 tables.
dans la 1ere table j'ai 2 vairables : CODE_COMMUNE et CODE_GROUPE

1ère requete : sélection des CODE_COMMUNE correspondant à un CODE_GROUPE particulier (donné par l'utilisateur)
-> ça ça marche
$query_reqb=mysql_query("select CODE_ELT, CODE_GROUPE from $tableb_serveur where $tableb_serveur.CODE_GROUPE='$datareq[CODE_GROUPE]'");

dans une 2ème table j'ai 2 variables : CODE_ACTIVITE et GROUPE_ACTIVITE

2ème requète : sélection des CODE_ACTIVITE correspondant à un GROUPE d'aCTIVITE particulier (donné par l'utilisateur)
-> ça ça marche.
$query_reqnaf = mysql_query(' select NAF700, '.$VALEUR_CD.', '.$act.' from '.$tablec_serveur.' where '.$act.'='.$VALEUR_CD.' ');

dans une 3ème table j'ai 3 variables : CODE_COMMUNE, CODE_ACTIVITE, EFFECTIF
3ème requête : je souhaite pouvoir effectuer une requête sur cette table en fonction des résultats des 2ères requêtes afin d'en retenir une somme d'effectif. C'est à dire que je souhaite sélectionner les CODE_COMMUNE et les CODE_ACTIVITE dans ma table 3 correspondant aux 2 premières requetes.
j'ai essayé un truc du style là mais ça ne marche pas :
while ($datareqb = mysql_fetch_array($query_reqb))
{
while ($datareqnaf = mysql_fetch_array($query_reqnaf))
{
$query_reqnafb=mysql_query('select ANNEE, NAF700, DECOM, SUM(EMP_T_TOTA) as somme
from '.$table_local.'
where NAF700="'.$datareqnaf[NAF700].'" and DECOM='.$datareqb[CODE_ELT].'
GROUP BY NAF700, ANNEE
ORDER BY NAF700, ANNEE');
}
}

Je sais pas is j'ai été plus clair????

merci de ton aide !!!
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
7 oct. 2005 à 15:06
un truc que j'ai pas dit c'est que les les tables 1 et 2 sont dans une base et que la table 3 est dans une autre ....

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

Posez votre question
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
7 oct. 2005 à 15:19
Salut..



merci d'avoir fait l"effort de preciser ta question

je vais alros faire l'effort de tenter de répondre.

si je comprends bien.

tu as deux entrées de l'utilisateur: $A1 et $B1

tu as trois tables:

table A: champ A1 et champ A2

table B: champ B1 et champ B2

table C: champ A2 et champ B2 et champ C1



tu veux que à partir de $A1 et $B1 tu retrouves C1.



Voici comment je ferais:



query="SELECT C.C1 FROM A,B,C WHERE A.A1=$A1 AND B.B1=$B1 AND C.A2=A.A2 AND C.B2=B.B2"

(les variables avec les $ sont tes variables d'entrées..)




-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
7 oct. 2005 à 15:26
pour les probleme de changement de base, rajoute le nom de tes base de données devant tes tables
-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
7 oct. 2005 à 15:28
oui en fait en écrivant ma "précision" je me suis aperçu de la technique à adopter mais est-il possible de faire un select sur deux bases en même temps ?? car mon problème est là désormais je sais pas comment lui dire que telle table se trouve sur telle base etc ...!!
merci pour ta réponse en tout cas !!! ça commence à me débloquer !!!!
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
7 oct. 2005 à 16:06
oui oui, mets le nom de ta db devant tes tables
-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
fredo35m Messages postés 244 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 12 juillet 2006
7 oct. 2005 à 17:42
Bon j'y suis presque mais j'ai encore un petit soucis, je mets ma requête pour t'expliquer :

SELECT $cnx.$table_groupes.TYPE_ELT,
$cnx.$table_groupes.CODE_GROUPE,
$cnx.$table_groupes.CODE_REGROUPT,

$cnx.$table_regroupt.NOM_REGROUPT,
$cnx.$table_regroupt.CODE_REGROUPT,

$cnx.$table_det_grp.CODE_GROUPE,
$cnx.$table_det_grp.CODE_ELT,

$cnx.$table_naf.NAF700,
$cnx.$table_naf.NAF60,

$unedic.$table_unedic.DECOM,
$unedic.$table_unedic.NAF700,
$unedic.$table_unedic.ANNEE,
SUM($unedic.$table_unedic.EMP_T_TOTA) as somme

FROM $cnx.$table_groupes, $cnx.$table_regroupt, $cnx.$table_det_grp, $cnx.$table_naf, $unedic.$table_unedic
WHERE $cnx.$table_groupes.CODE_REGROUPT='$territoire' and
$cnx.$table_groupes.TYPE_ELT=$cnx.$table_regroupt.CODE_REGROUPT and
$cnx.$table_groupes.CODE_GROUPE=$cnx.$table_det_grp.CODE_GROUPE and
$cnx.$table_groupes.CODE_GROUPE='$CODE_GROUPEB' and
$unedic.$table_unedic.DECOM=$cnx.$table_det_grp.CODE_ELT and
$cnx.$table_naf.NAF60='$VALEUR_CD' and
$unedic.$table_unedic.NAF700=$cnx.$table_naf.NAF700
GROUP BY $unedic.$table_unedic.NAF700, $unedic.$table_unedic.ANNEE
ORDER BY $unedic.$table_unedic.NAF700, $unedic.$table_unedic.ANNEE
");

J'ai un problème avec la partie en gras, si je l'enlève ça marche bien sauf qu'il ne fait pas le lien entre la NAF700 de la table unedic et la NAF700 de la table naf. (=CODE_ACTIVITE), mais quand je le mets ça ne marche plus.
Ce qui m'étonne c'est que la partie qui est en rouge reviens à la même chose (=CODE_COMMUNE), et là il fait bien la correspondance entre les 2 tables, c'est à dire que le code commune est le même.
As tu une idée de où cela peut venir??
Désolé de t'embeter encore mais j'y suis presque (je pense et il me reste plus que ce soucis !!!)
merci encore !!!
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
7 oct. 2005 à 19:33
40 variables pour rien la !



Au lieu de faire une variable pour une base, autant la renommer via sql.



genre :

"SELECT u1.x, u1.y, u2.z, u2.r FROM nom_base1 u1, nom_base2 u2 WHERE u1.x = u2.x";



Parce que moi, quand je lis : $cnx.$table_regroupt.NOM_REGROUPT

Tu m'excuses, mais je comprend rien !

Une variable, pour bien être utilisée, doit être déclaré correctement.
Hors, tu utilises des $cnx, $table_regroupt sorti de nul part, et ca me
donne même pas envie de regarder.



J'imagine même pas la tête de ta DB quand elle doit lire un SELECT comme ca ;)
Rejoignez-nous