pb requete sql sur des champs date et time [resolu] - SQL/NoSQL - Programmation
Marsh Posté le 20-01-2006 à 11:23:09
Ceci n'est pas une requête, ceci est du code PHP.
Affiche la requête générée et colle la ici, et donne nous le type de tes champs jour et heure dans la base.
Marsh Posté le 20-01-2006 à 12:07:59
SELECT jour,heure FROM donnees where (jour between '2005-01-12' and '2005-01-20') and heure>'05:00:00'
jour est de type date, heure est de type time
Marsh Posté le 20-01-2006 à 12:49:20
...et ça te retourne pas tous les jours entre le 12 et le 20 janvier?
Marsh Posté le 20-01-2006 à 15:19:40
ça me retourne bien tous les jours, mais chaque jour est amputé des heures 00:00:00 à 04:00:00, alors que je voudrais que ça ne se fasse que sur le premier jour !
Marsh Posté le 20-01-2006 à 15:26:45
euh ben là c'est pas ce que tu lui as demandé...
Là tu lui as demandé de te retourner tous les couples (jour, heure) qui vérifient les conditions date1<jour<date2 ET heure>5:00:00
Ton résultat est donc conforme à la requête...
Ce que tu veux c'est plutot les couples (jour, heure) pour lesquels
(jour>=date1 ET heure>5:00:00) ET jour <= date2.
Je te laisse écrire ça en SQL...
Marsh Posté le 21-01-2006 à 12:15:28
SELECT jour,heure FROM donnees where (jour>='2005-01-13' and heure>'05:00')and jour<='2005-01-20' order by jour
meme résultat, toutes les lignes commencent à plus de 5h00 ...
Marsh Posté le 21-01-2006 à 12:19:26
ah ben oui, les parenthèses servent à rien, quand ya que des ET...je les avais mises que pour te faire comprendre qu'il fallait bien différencier les 2 parties...ça demande un peu plus de réflexion que de la traduction directe...
Tu t'en sortiras mieux avec une intersection...
Marsh Posté le 23-01-2006 à 19:47:50
Ca y est Je l'ai fait avec union, je pense que c'est la meilleure méthode
SELECT $champs FROM $table where jour='$datedebut' and heure>'$val_heure' union SELECT $champs FROM $table where jour>'$datedebut' and jour<='$datefin'"
Marsh Posté le 23-01-2006 à 21:18:33
euh non.
Avec une union tu vas en avoir de trop.
Marsh Posté le 23-01-2006 à 22:27:28
bah non, j'ai vérifié...
lis bien ma requête, elle semble d'une logique implacable
Marsh Posté le 23-01-2006 à 22:43:43
mal lu, en effet...
Marsh Posté le 23-01-2006 à 22:49:50
SELECT $champs FROM $table where jour='$datedebut' and heure>'$val_heure' union SELECT $champs FROM $table where jour>'$datedebut' and jour<='$datefin'
équivaut à
SELECT $champs
FROM $table
WHERE (jour='$datedebut' and heure>'$val_heure')
OR (jour>'$datedebut' and jour<='$datefin')
Marsh Posté le 24-01-2006 à 07:09:56
Exactement.
D'ailleurs je ne sais plus trop ce à quoi je pensais comme intersection...
Marsh Posté le 24-01-2006 à 08:39:43
A priori, oui.
Marsh Posté le 24-01-2006 à 12:01:22
Pas certain que ce soit plus rapide (suivant les SGBD, il fait comme l'union ou pas ), mais au moins c'est un peu plus lisible
Marsh Posté le 24-01-2006 à 12:14:44
Beegee a écrit : Pas certain que ce soit plus rapide (suivant les SGBD, il fait comme l'union ou pas ), mais au moins c'est un peu plus lisible |
Je dirais qu'au pire c'est aussi rapide...
Marsh Posté le 20-01-2006 à 10:16:53
bonjour,
je cherche quelqu'un pour m'aider à faire une requête mysql en php:
j'ai 2 champs "jour" au format date et "heure" au format time
je veux afficher les lignes entre une date de début et une date de fin, avec la date de début qui commence à une heure supérieure à 5 heures:
voici ma requete qui plante
$req=select jour, heure from $table where jour (between $date1 and $date2) and heure >'05:00:00'
ça me renvoie TOUTES les lignes qui sont supérieures à 5h, alors que je voudrais que ça se fasse que sur le premier jour...
Message édité par wamdk le 23-01-2006 à 19:46:44