[SQL-PHP] Problème de sous-requête

Fermé
David - 4 août 2006 à 11:44
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 - 7 août 2006 à 11:07
Bonjour,

J'ai un problème avec une requête SQL qui ne renvoit aucun résultat alors qu'elle devrait . Cette requête doit me sélectionner plusieurs enregistrements dans la table societe, enregistrements dont l'id_departement2 fait partie d'une sélection de département (tous les départements d'une région sélectionnée $id_reg).

voilà la requête :

SELECT * FROM societe
where societe.id_departement2 IN
(SELECT id_departement FROM departement where departement.id_region='$id_reg')


J'ai testé la sous-requete toute seule et elle marche.Je ne comprends pas d'ou vient le problème...

Merci de votre aide

14 réponses

Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 64
4 août 2006 à 11:50
Salut. Tu pourrais mettre l'architecture de tes tables ?

Sinon je dirais d'essayer ça plutôt
SELECT * FROM societe 
WHERE id_departement2 IN (SELECT id_departement FROM departement WHERE departement.id_region='$id_reg') 
0
Oui j'ai regardé sur google, sur plusieurs forums et c'est pour cela que je pose la question car je ne trouve pas la cause de ce problème...

Pour ta proposition, aucun effet.......

Pour la structure de mes tables, voila :
TABLE SOCIETE : id_societe, id_departement, id_departement2, id_region + d'autres champs

TABLE departement : id_departement, id_region, nom_departement

TABLE region : id_region, nom_region
0
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 64
4 août 2006 à 12:26
Humm, si ton "IN" ne marche pas, c'est surement parce qu'il s'attend à avoir des strings (IN ("1","2") par exemple).

Et sinon, est-ce que
SELECT * FROM societe 
WHERE (societe.id_departement2 = departement.id_departement) AND (departement.id_region='$id_reg')
ne marcherait pas ?
0
Oui je sais qu'il s'attend a recevoir des string puisque quand je mets des valeurs dans mon IN ça marche....

Je ne comprends pas pourquoi ça ne veut pas marcher.....

Pour info, mon id_departement2 n'est pas une clé, primaire ou secondaire....faut-il que je fasse une jointure entre les tables???

Ta seconde proposition n' aucun effet non plus...


Jvoulais trouver une alternative mais c'est impossible, il faut que je trouve pourquoi ça marche pas car je ne peux pas faire autrement...

Je veux faire apparaitre des societes qui ne sont pas présentent sur la région sélectionnée mais qui interviennent quand même sur certains département...
L'id_region n'est donc pas le même, ni l'id_departement.

Est-ce que je peux te dire autre chose pour essayer de t'aider???

Merci de ton aide déjà et de tes propositions...
0

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

Posez votre question
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 64
4 août 2006 à 14:32
Hmmm, la je cale un peu.

Sinon je vois bien une autre méthode : tu fais ta sous requête (mysql_query), tu mets le résultat dans un tableau et tu le passes en paramètre à ta requête principale ... Mais ça tient plus du bidouillage !
0
Je viens d'y penser moi aussi...

Mais comment je fais???JE fais une boucle pour tester toutes les valeurs de mon tableau ou bien il existe quelque chose pour faire : si id_departement2 IN TABLEAU????
0
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 64
4 août 2006 à 15:30
Moi j'aurais fait avec une boucle du genre while ($row = mysql_fetch_row).
0
J'essaye ça ce week end et je te tiens au courant lundi...

Merci pour ton aide et ta patience......
0
Jsuis pas arrivé à faire fonctionner le système avec la requête principale se servant des données du tableau de résultats de la sous-requête...

Quelqu'un pourrait m'aider?

Merci
0
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 64
7 août 2006 à 09:27
Tu as essayé avec quoi ? Faire voir le code intéressant.
0
$result = mysql_query("SELECT id_departement FROM departement where id_region='$id_reg'");

while ($row = mysql_fetch_row(result))

{
$result2 = mysql_query("SELECT * FROM societe where id_departement2=$row");
}

Jcrois que jmembrouille là.......
0
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 64
7 août 2006 à 10:04
Oui en effet, vu que $row est un tableau !

Essaie plutôt avec ça :
$result2 = mysql_query("SELECT * FROM societe WHERE `id_departement2` = '$row[0]'"); 
Prends d'ailleurs l'habitude de mettre SELECT,UPDATE,DELETE,FROM,WHERE,LIKE,AS etc en majuscules, ça t'aide à mieux relire ton code pour voir la requête :) Autre chose, l'appel de variable dans une requête se faire toujours avec des quotes, sous peine d'erreur !
0
ok j'essaye ça...mais si je mets ma requete dans la boucle, il faut aussi que je mette tout de suite après l'affichage car sinon au final j'aurais qu'une reponse puisque le $result2 va changer a chaque fois sinon.......


Merci pour les conseils : je sais, je fais attention à l'ecriture mais c'est en recopiant que je n'ai pas mis les quote et les majuscules...
0
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 64
7 août 2006 à 11:07
Oui tout à fait, il te faudra même probablement rajouter un while dans ta nouvelle requête.

Quant au recopiage, tu peux aussi tout simplement copier/coller le code et utiliser la balise code, qui conservera la mise en page.
0