Page 1 sur 1

PRobleme SQL imbriquée

Posté : 05 janv. 2012, 22:04
par torn33260
Bonjour, pour mon petit site amateur j'ai besoin de faire une requête sql imbriquand une autre requête. J'ai fais ca
SELECT * FROM `ex_mycontest`,`ex_vote` 
WHERE `ex_mycontest`.`ex_myc_validation` = '1'
AND `ex_mycontest`.`ex_myc_proprietaire` <> '" . $_SESSION['id'] . "'
AND `ex_mycontest`.`ex_myc_actif` = '1'
AND `ex_mycontest`.`ex_myc_datetime` > '" . time() . "'  					
AND `ex_mycontest`.`ex_myc_multiple` > (SELECT COUNT(*)  FROM `ex_vote` WHERE `ex_vi_contest`='`ex_mycontest`.`ex_myc_id`' AND ex_vi_votant='" . $_SESSION['id'] . "' AND ex_vi_etat ='1' OR ex_vi_etat ='2')
ORDER BY `ex_mycontest`.`ex_myc_id` DESC 
LIMIT 20;
et voila le résultat si je le print
SELECT * FROM `ex_mycontest`,`ex_vote` 
WHERE `ex_mycontest`.`ex_myc_validation` = '1' 
AND `ex_mycontest`.`ex_myc_proprietaire` <> '1' 
AND `ex_mycontest`.`ex_myc_actif` = '1' 
AND `ex_mycontest`.`ex_myc_datetime` > '1325789742' 
AND `ex_mycontest`.`ex_myc_multiple` > (SELECT COUNT(*) FROM `ex_vote` WHERE `ex_vi_contest`='`ex_mycontest`.`ex_myc_id`' AND ex_vi_votant='1' AND ex_vi_etat ='1' OR ex_vi_etat ='2') 
ORDER BY `ex_mycontest`.`ex_myc_id` DESC 
LIMIT 20;
visiblement tout marche sauf '`ex_mycontest`.`ex_myc_id`' ligne 7 ... En mettant en dur une valeur (ex : 10) ma requete s'execute correctement et tout marche hors '`ex_mycontest`.`ex_myc_id`' ne se converti pas en '10'.

Comment faire pour donner le chiffre dans la deuxieme requête?

merci de votre aide

Re: PRobleme SQL imbriquée

Posté : 06 janv. 2012, 11:36
par Shenryu
Salut,

Oui il ne connaît pas la valeur de `ex_mycontest`.`ex_myc_id` car ex_mycontest n'est pas dans ta seconde requête. Il faut que tu fasses une jointure sur cette table dans ta requête également.

Essaye tout d'abord de faire fonctionner ta sous-requête plutôt que directement l'ensemble, ce sera plus simple à débugguer ;)

Re: PRobleme SQL imbriquée

Posté : 06 janv. 2012, 12:16
par torn33260
Bonjour, visiblement il falait simplement rajouter le nom de la table dans la seconde requête :
$query17 = "SELECT * FROM `ex_mycontest` ,`ex_vote` 
WHERE `ex_mycontest`.`ex_myc_validation` = '1'
AND `ex_mycontest`.`ex_myc_proprietaire` <> '" . $_SESSION['id'] . "'
AND `ex_mycontest`.`ex_myc_actif` = '1'
AND `ex_mycontest`.`ex_myc_datetime` > '" . time() . "'  					
AND `ex_mycontest`.`ex_myc_multiple` > (SELECT COUNT(*)  FROM [b]`ex_mycontest`[/b] , `ex_vote` WHERE `ex_vi_contest`= `ex_myc_id` AND ex_vi_votant='" . $_SESSION['id'] . "' AND ex_vi_etat ='1' OR ex_vi_etat ='2')
ORDER BY `ex_mycontest`.`ex_myc_id` DESC 
LIMIT 20"; 
merci et bonne journée