requete sql not in [ resolu - sql help ] - SQL/NoSQL - Programmation
Marsh Posté le 20-07-2005 à 13:54:20
Les anciennes versions de mySql ne connaissent pas les sous-requêtes. 
Ca doit être ton problème ... 
 
La solution est de passer par des jointures externes. 
 
SELECT * 
FROM prix 
WHERE nom_maison='Ghisoni' 
AND date_1 NOT IN ( 
  SELECT date_ariv 
  FROM location 
  WHERE nom_maison='Ghisoni') 
AND date_2 NOT IN ( 
  SELECT date_dpar 
  FROM location 
  WHERE nom_maison='Ghisoni') 
ORDER BY date_1; 
 
devient qqch comme : 
 
SELECT * 
FROM prix p 
LEFT JOIN location l1 on l1.date_ariv = prix.date_1 
LEFT JOIN location l2 on l2.date_dpar = prix.date_2 
WHERE p.nom_maison='Ghisoni' 
AND l1.nom_maison='Ghisoni' 
AND l2.nom_maison='Ghisoni' 
AND l1.date_ariv IS NULL 
AND l2.date_ariv IS NULL 
ORDER BY p.date_1; 
 
(jointures externes, et comparaisons à NULL) 
 
Il se peut qu'il y ait des erreurs, ça fait quelque temps que j'utilise plus mySql.
Marsh Posté le 20-07-2005 à 15:47:59
je confirme, c'est pas un pb de not in, mais de requêtes imbriquées. Elles sont supportées depuis la version MySql 4.x 
Marsh Posté le 21-07-2005 à 20:59:29
merci a tous, j'ai utiliser LEFT JOIN  et sa marche après une petite modif de la base de donnée
 et sa marche après une petite modif de la base de donnée 
Marsh Posté le 20-07-2005 à 06:56:26
Bonjour tout le monde, voila je doit finir mon site pour mon stage et je me heurte a un probleme ... un gros probleme puisque lorsque j'heberge mon serveur mysql en local je n'ai aucun soucis avec mes requetes SQL , sauf que quand je passe sur free mes requetes avec NOT IN NE passe plus....
Voici le code php :
$requete="SELECT * FROM prix WHERE nom_maison='".$maison."' AND date_1 MINUS ( SELECT date_ariv FROM location WHERE nom_maison='".$maison."') AND date_2 MINUS ( SELECT date_dpar FROM location WHERE nom_maison='".$maison."') ORDER BY date_1";
voici ce que sa donne quand c'est envoyer au serveur :
SELECT * FROM prix WHERE nom_maison='Ghisoni' AND date_1 NOT IN ( SELECT date_ariv FROM location WHERE nom_maison='Ghisoni') AND date_2 NOT IN ( SELECT date_dpar FROM location WHERE nom_maison='Ghisoni') ORDER BY date_1
et voila l'erreur que je rentre ça sous php my admin avec free ( alors que chez moi ça marche ):
MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT date_ariv FROM location WHERE nom_maison='Ghisoni') AND
Bref le not in ne passe pas dutout j'arrive pas a savoir pourquoi, alors si vous pouviez m'aider je vous serai vraiment reconnaissant. Merci beaucoup car là j'en peu plus
Ps : désoler pour la syntaxe surement mauvaise, et ma logique surement tiré par les cheveux...
Message édité par Kojima_ le 21-07-2005 à 21:01:32