[ resolu - sql help ] requete sql not in

requete sql not in [ resolu - sql help ] - SQL/NoSQL - Programmation

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 :  
 

Citation :

$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 :
 

Citation :

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 ):

Citation :

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  :kaola:  :kaola:  :kaola:  :kaola:  
 
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
Reply

Marsh Posté le 20-07-2005 à 06:56:26   

Reply

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.

Reply

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 ;)


Message édité par rufo le 20-07-2005 à 15:48:19
Reply

Marsh Posté le 21-07-2005 à 00:03:27    

merci pour vos réponse :)

Reply

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 :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed