Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
1987 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requête MYSQL avec Where un peu complexe

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requête MYSQL avec Where un peu complexe

n°2214636
hppp
Serveur@home
Posté le 30-12-2013 à 19:26:05  profilanswer
 

Salut à tous,
 
Je suis en train de me casser la tête sur une requête SQL. J'ai une table avec des température tt les 5min et avec l'heure et la date dedans.
 
Je voudrais récupérer les dernier 24h uniquement dans ma requête.
 
Je suis arrivé à faire 2 requettes qui font se que je veux faire au final mais je voulais savoir si il n'etait pas possible de faire la même chose en une?
 

Code :
  1. SELECT * FROM temperature WHERE date='29/12/2' AND heure >= '16:00:00'
  2. SELECT * FROM temperature WHERE date='30/12/2' AND heure <= '16:00:00'


 
Merci de votre aide.

mood
Publicité
Posté le 30-12-2013 à 19:26:05  profilanswer
 

n°2214637
Profil sup​primé
Posté le 30-12-2013 à 19:42:41  answer
 

T'as pas l'instruction OR ?

n°2214638
hppp
Serveur@home
Posté le 30-12-2013 à 20:44:30  profilanswer
 


 
 
Pourquoi OR?
 
Il faut que je récupère toutes les données entre le 29/12/2013 à partir de 16h jusqu'au 30/12/2013 jusqu'a 16h.

n°2214639
Profil sup​primé
Posté le 30-12-2013 à 20:52:41  answer
 

Ah pardon, j'ai pas tout imprimé.
 
BETWEEN alors.

n°2214640
Volkhen
Posté le 30-12-2013 à 21:39:48  profilanswer
 

hppp a écrit :

Salut à tous,
 
Je suis en train de me casser la tête sur une requête SQL. J'ai une table avec des température tt les 5min et avec l'heure et la date dedans.
 
Je voudrais récupérer les dernier 24h uniquement dans ma requête.
 
Je suis arrivé à faire 2 requettes qui font se que je veux faire au final mais je voulais savoir si il n'etait pas possible de faire la même chose en une?
 

Code :
  1. SELECT * FROM temperature WHERE date='29/12/2' AND heure >= '16:00:00'
  2. SELECT * FROM temperature WHERE date='30/12/2' AND heure <= '16:00:00'


 
Merci de votre aide.


Sérieusement ? Date et heure dans deux champs séparés ?
 
Si le schéma n'est pas définitif, passer à du datetime ne ferait pas de mal et permettrait un simple SELECT * FROM temperature WHERE date_mesure BETWEEN '2002-12-29 16:00:00' AND '2002-12-30 16:00:00' voire pour faire sa feignasse SELECT * FROM temperature WHERE date_mesure BETWEEN NOW() - INTERVAL 24 HOUR AND NOW()


---------------
Main/Alt1/Alt2/Alt3
n°2214641
hppp
Serveur@home
Posté le 30-12-2013 à 21:44:17  profilanswer
 

Volkhen a écrit :


Sérieusement ? Date et heure dans deux champs séparés ?
 
Si le schéma n'est pas définitif, passer à du datetime ne ferait pas de mal et permettrait un simple SELECT * FROM temperature WHERE date_mesure BETWEEN '2002-12-29 16:00:00' AND '2002-12-30 16:00:00' voire pour faire sa feignasse SELECT * FROM temperature WHERE date_mesure BETWEEN NOW() - INTERVAL 24 HOUR AND NOW()


 
Oui j'y avais pensé, je crois que je vais voir pour mettre la date et l'heure dans le même champs.
 
Merci  :jap:

n°2214787
gpl73
Posté le 02-01-2014 à 13:50:43  profilanswer
 

c'est vrai une zone timestamp(ou datetime) serait le plus cool ... mais bon, tu ne dois pas l'avoir si tu demandes ça ...
sinon  
1.SELECT * FROM temperature WHERE  
(date='29/12/2' AND heure >= '16:00:00') // tu selectionnes les enregistrements du 29 après 16h
 or  
(date='30/12/2' AND heure <= '16:00:00') // tu sélectionnes les enregistrements du 30 avant 16h
 
Pour la valeur de ta date , tu peux mettre now() and now() -1 day, au cas où
 
Tu as aussi la possibilité de faire un union entre tes 2 requêtes... ce qui peut être pas mal... mais pas des plus performants (à exécuter, ni à maintenir)
SELECT * FROM temperature WHERE date='29/12/2' AND heure >= '16:00:00'
union
SELECT * FROM temperature WHERE date='30/12/2' AND heure <= '16:00:00' ;
 
 
 
 
 


Message édité par gpl73 le 02-01-2014 à 14:07:24
n°2214801
rufo
Pas me confondre avec Lycos!
Posté le 02-01-2014 à 14:49:08  profilanswer
 

+1 pour un champ unique de type timestamp pour avoir la date et heure et +1 pour BETWEEN.
Par ailleurs, la fonction DATE_FORMAT() pourra t'aider en cas de besoin de traiter uniquement avec la partie date ou la partie heure ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2218153
Nirm
Posté le 30-01-2014 à 14:50:57  profilanswer
 

Salut.
Et pourquoi pas avec un DESC sur le champ date?
Les dernières 24h correspondent aux (24 x 12*) derniers enregistrements.
(*12 enregistrement par heure: 12h00, 12h05, 12h10, ..., 12h55)
 
On aurait donc:
SELECT * FROM TEMPERATURE ORDER BY DATE DESC LIMIT 0, 264;
 
Mais je dis peut être une connerie si tu recherches pas les dernières 24 heures "glissantes".


Message édité par Nirm le 30-01-2014 à 14:51:53

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requête MYSQL avec Where un peu complexe

 

Sujets relatifs
[Mysql] Modification d'une partie d'une valeurProblème de connexions successives à MYSQL
Script pour gérer les dates-heures comme dans MySql dans un formulairerequete mysql ou comparaison de tableaux php ?
Projet de fin d'année. (Java,Html,MySQL,PHP)[débutant] Récupérer un vecteur avec une seule requête.
C++ et procédure stockées MySqlMySql mes tables sont la mais je ne les vois pas
Plus de sujets relatifs à : Requête MYSQL avec Where un peu complexe


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR