créneaux horaires

Eléphant du PHP | 97 Messages

26 avr. 2005, 10:19

Salut,

J'ai une base MySQL pour faire des réservation avec plusieurs champs dont : "Heure_Deb" et "Heure_Fin".

Je ne trouve pas la requete qui me permette de voir si j'ai des réservations suivant des créneau horaire.

Par exemple, j'ai :

reserv_debut reserv_fin
00:14:00 00:18:00
00:08:00 00:20:00
00:08:00 00:20:00
00:08:00 00:12:00
00:14:00 00:17:00
00:08:00 00:12:00
00:14:00 00:17:00
00:17:00 00:20:00
00:17:00 00:20:00
00:14:00 00:19:00
00:12:00 00:15:00
00:10:00 00:17:00
00:09:00 00:17:00
00:17:00 00:18:00

je veux savoir si il y a des réservations dans le créneau 12H00 - 14H00

Mammouth du PHP | 19672 Messages

26 avr. 2005, 10:23

à première vue, tu as enregistré dans ta base des horaires qui sont tous dans la fourchette 00h00mn00" et 00h59mn59"
Tu n'as donc aucune chance de trouver quoique ce soit entre 12h00mn00" et 14h00mn00"
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 97 Messages

26 avr. 2005, 10:29

non !!

00:14:00 00:18:00

c'est bien 14h => 18h

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

26 avr. 2005, 10:34

Et à quoi correspond les 2 premiers chiffres ? 00j00h00m ??

Il faudrait que tu nous explique la conception de ta base !!! Pour quelle raison tu as choisi un format non standart ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 19672 Messages

26 avr. 2005, 10:41

non !!

00:14:00 00:18:00

c'est bien 14h => 18h
Si tu as enregistré ça dans un champ de type TIME dans une base de données, ça ne peut pas marcher: un champ TIME a pour format HH:mn:sec
Selon tes données, à quoi correspond donc le 00 du début ??
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 97 Messages

26 avr. 2005, 10:42

standard ou pas standard la requete devrait je pense être similaire

le choix de mon coté est interne

Mammouth du PHP | 19672 Messages

26 avr. 2005, 10:53

Alors fais voir la requête que tu as conçue qu'on ait une base de départ, et la structure de la table, les types de champ sont important.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

26 avr. 2005, 10:54

Essaye cette requete qui doit chercher sur les 2 caractères qui correspondent à l'heure

Code : Tout sélectionner

SELECT * FROM maTable WHERE CAST(SubString(reserv_debut,4,2) AS SIGNED) >= 12 AND CAST(SubString(reserv_fin,4,2) AS SIGNED) <= 14
Ca devrait extraire la partie heure de ton champ, le convertir en entier en tester sa valeur.

Si ta base est bien remplie (pas de debut après la fin !!! ^^ si si ça arrive !!!), ca pourrait fonctionner.

J'ai la flemme de créer une base donc je te laisse faire les tests et me tenir au courant du résultat !!!
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 97 Messages

26 avr. 2005, 11:01

bon j'ai corriger ma connerie :

reserv_date
14:00:00

reserv_debut
18:00:00

au lieu de 00:14:00, ...

je vais donc essayé la requete :
SELECT * FROM maTable
WHERE CAST(SubString(reserv_debut,4,2) AS SIGNED) >= 12
AND CAST(SubString(reserv_fin,4,2) AS SIGNED) <= 14

mais avec SubString(reserv_debut,0,2) cette fois ? je suppose

Eléphant du PHP | 97 Messages

26 avr. 2005, 11:08

[code]SELECT * FROM maTable
WHERE CAST(SubString(reserv_debut,0,2) AS SIGNED) >= 10
AND CAST(SubString(reserv_fin,0,2) AS SIGNED) <= 17 [/code]

requete sans erreurs, mais sans même de résultats alors que j'ai bien une réserv de 10 à 17.

Je ne vois vraiment pas là ...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

26 avr. 2005, 11:14

C'est ça, t'as tout compris !!!

Essaye de prendre entre 9 et 18 et de mettre < et > à la place de <= et >=
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 97 Messages

26 avr. 2005, 11:15

En fait là ou ça se complique c'est que je peux avoir une réservation de 9h à 17h, par exemple.
Et passer une requete (que je ne parviens pas à construire) pour regarder si j'ai qql chose de 12h à 14h. => Sachant que la réponse doit être oui, j'ai qql chose, puisque j'ai de 9h à 17h !!!

Le problème est que dans la table j'ai 09:00:00 et 17:00:00; le 12:00:00 à 14:00:00 jene vois pas comment faire comprendre à ma requete que c'est inclu dans 09:00:00 et 17:00:00.

Eléphant du PHP | 97 Messages

26 avr. 2005, 11:23

SELECT * FROM reserv_salles
WHERE reserv_debut > '12:00:00'
AND reserv_fin < '14:00:00';

ok mais la je ne remonte pas ceux qui participe à cette tranche horaire mais ceux qui commencent et finissent exactement comme cela : 12 ; 14

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

26 avr. 2005, 11:24

SELECT *
FROM   reserv_salles
WHERE  reserv_debut < '14:00:00'
   AND reserv_fin   > '12:00:00'

Eléphant du PHP | 97 Messages

26 avr. 2005, 11:29

[quote="albat"][php]SELECT *
FROM reserv_salles
WHERE reserv_debut < '14:00:00'
OR reserv_fin > '12:00:00'[/php][/quote]

ça j'ai déjà fais, mais c'est pas ok non plus car il prnd un réserv qui à lieu de 17h à 18 puisque : " reserv_fin > '12:00:00' "