Résultats d'une requête incompréhensibles

Résultats d'une requête incompréhensibles - SQL/NoSQL - Programmation

Marsh Posté le 21-12-2009 à 18:28:37    

Bonjour,
Je rencontre un problème avec une requête SQL sous MySQL 5.
 
En testant le résultat dans PHPMyAdmin, j'obtiens la totalité de ma table avec cette req, ce qui est normal :  
 

Code :
  1. SELECT *
  2. FROM log_echecs_connexion
  3. WHERE dateheure
  4. BETWEEN (
  5. '2009-12-20 0:05:33'
  6. AND '2009-12-21 18:05:33'
  7. )
  8. AND `adr_ip` IS NOT NULL


 
Ce qui l'est moins, c'est quand je la modifie pour n'avoir que les données voulues. Elle ne retourne rien, alors que le critères changé (dernier champ adr_ip) contient bien la donnée de ma requête :  
 

Code :
  1. SELECT *
  2. FROM log_echecs_connexion
  3. WHERE dateheure
  4. BETWEEN (
  5. '2009-12-20 0:05:33'
  6. AND '2009-12-21 18:05:33'
  7. )
  8. AND `adr_ip` = 'xxxxxxx'


 
Je précise que dans le champ dateheure, toutes les données sont comprises dans l'intervalle de dates de ma requête.
 
Contenu de la table :  
  id_log     dateheure                   adr_ip          compte  
      1    2009-12-20 20:56:09   123.456.789.0    cpte1  
      2    2009-12-20 22:46:13   127.0.0.1          cpte1  


---------------
http://www.aideinfo.com/  Whois adresses IP/domaines le plus évolué !!  FAQ Free Mobile
Reply

Marsh Posté le 21-12-2009 à 18:28:37   

Reply

Marsh Posté le 21-12-2009 à 18:32:17    

si tu met LIKE au lieu de '=' ?


Message édité par stealth35 le 21-12-2009 à 18:32:29
Reply

Marsh Posté le 21-12-2009 à 19:07:25    

Pas mieux, seul ou en ajoutant un % avant et après ma donnée. Et même en cherchant sur '%12%'. Par contre, avec SELECT * FROM log_echecs_connexion WHERE `adr_ip` = '127.0.0.1', ça m'affiche bien le résultat. C'est l'ajout de la date qui pose problème.


Message édité par aideinfo le 21-12-2009 à 19:09:01

---------------
http://www.aideinfo.com/  Whois adresses IP/domaines le plus évolué !!  FAQ Free Mobile
Reply

Marsh Posté le 21-12-2009 à 19:40:13    

et en utilisant DATE (ce qui serai plus propre)

 
Code :
  1. SELECT *
  2. FROM `log_echecs_connexion`
  3. WHERE `dateheure`BETWEEN (DATE('2009-12-20 0:05:33') AND DATE('2009-12-21 18:05:33')) AND `adr_ip` = 'xxxxxxx'


Message édité par stealth35 le 21-12-2009 à 19:41:06
Reply

Marsh Posté le 21-12-2009 à 19:49:53    

Reply

Marsh Posté le 22-12-2009 à 10:25:48    

Essaie

Code :
  1. WHERE adr_ip LIKE '217.0.0.1' AND dateheure BETWEEN '2009-12-20 0:05:33' AND '2009-12-21 18:05:33'


 
Je sais, ça peut paraître bizarre, mais j'ai déjà vu de drôles de trucs avec BETWEEN.
Tu peux essayer aussi de le remplacer par les classiques "dateheure <= 'xxx' AND dateheure >= 'xxx'", ne serait-ce que pour vérifier si c'est bien ça qui pose problème ou non.
 
Edit : il faut enlever les parenthèses en fait je crois.

Code :
  1. WHERE dateheure BETWEEN '2009-12-20 0:05:33' AND '2009-12-21 18:05:33' AND adr_ip LIKE '217.0.0.1'


Ouais, c'est bizarre. Le plus simple avec between, c'est de toujours le mettre en fin de WHERE et de ne jamais mettre de parenthèses pour éviter les comportements curieux.


Message édité par kao98 le 22-12-2009 à 10:29:00

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 22-12-2009 à 13:45:02    

Merci kao98, ça marche effectivement comme ça.
 

Code :
  1. SELECT * FROM log_echecs_connexion WHERE adr_ip = '127.0.0.1'
  2. AND dateheure BETWEEN '2009-12-21 12:39:23' AND '2009-12-22 12:39:23'


 
Ce qui est bizarre, c'est qu'avant, sans paranthèse, ça me faisait des lost connection during query.


---------------
http://www.aideinfo.com/  Whois adresses IP/domaines le plus évolué !!  FAQ Free Mobile
Reply

Marsh Posté le 23-12-2009 à 10:54:01    

hmmm et si dans la requête de départ tu vires les parenthèses qui servent à rien ?

 

parce que à la limite :

 

between (xx) and (yy) <= OK
(between xx and yy) <= ok

 

mais :

 

between (xx and yy) <= je vois pas ce que ça veut dire !

 

ça m'étonne donc pas que mysql non plus ;)

 

la syntaxe de between, c'est sans parenthèse : between xx and yy


Message édité par MagicBuzz le 23-12-2009 à 10:54:27
Reply

Sujets relatifs:

Leave a Replay

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