[resolu]pb requete sql sur des champs date et time

pb requete sql sur des champs date et time [resolu] - SQL/NoSQL - Programmation

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
Reply

Marsh Posté le 20-01-2006 à 10:16:53   

Reply

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.


---------------
Can't buy what I want because it's free -
Reply

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

Reply

Marsh Posté le 20-01-2006 à 12:49:20    

...et ça te retourne pas tous les jours entre le 12 et le 20 janvier? :??:


---------------
Can't buy what I want because it's free -
Reply

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 !

Reply

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 [:skeye]
 
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... ;)


---------------
Can't buy what I want because it's free -
Reply

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  :fou: ...


Message édité par wamdk le 21-01-2006 à 12:17:00
Reply

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


Message édité par skeye le 21-01-2006 à 12:20:27

---------------
Can't buy what I want because it's free -
Reply

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'"


Message édité par wamdk le 23-01-2006 à 19:51:05
Reply

Marsh Posté le 23-01-2006 à 21:18:33    

euh non.
Avec une union tu vas en avoir de trop.[:urd]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 23-01-2006 à 21:18:33   

Reply

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

Reply

Marsh Posté le 23-01-2006 à 22:43:43    

mal lu, en effet...;)


---------------
Can't buy what I want because it's free -
Reply

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

Reply

Marsh Posté le 24-01-2006 à 07:09:56    

Exactement. :jap:
D'ailleurs je ne sais plus trop ce à quoi je pensais comme intersection...[:chrisbk]


Message édité par skeye le 24-01-2006 à 07:12:55

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 24-01-2006 à 08:36:35    

est ce que la solution de Beegee est plus rapide ???

Reply

Marsh Posté le 24-01-2006 à 08:39:43    

A priori, oui.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 24-01-2006 à 09:28:37    

Merci, j'adopte

Reply

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

Reply

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


---------------
Can't buy what I want because it's free -
Reply

Sujets relatifs:

Leave a Replay

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