[SQL] question sur date

Répondre
Mr.White
le 18/05/2004 à 12:33
Mr.White
J'ai un petit problème avec les date ET j'ai une petite question.

tout d'abord, mon problème :
Voici la requête
>> SELECT date FROM reservation
WHERE date >= 20040518
AND poste1 = "nul"
OR poste2 = "nul"
OR poste3 = "nul"
OR poste4 = "nul"
OR poste5 = "nul"
OR poste6 = "nul"
OR poste7 = "nul"
OR poste8 = "nul"
OR poste9 = "nul"
OR poste10 = "nul"
groupe BY date
LIMIT 0 , 30

1) Voici l'erreur qu'il me renvoi :
#1064 - Erreur de syntaxe près de 'groupe
BY date LIMIT 0, 30' à la ligne 3
Notons que le LIMIT ... est rajouté par mysql (ca n'apparait pas dans ma requête)
Ce que je veut c'est récupérer tout les jours où il y a un poste libre. Un poste libre est à 'nul'.

2) Je ne suis pas certain que mon test avec la date du jour est correct.

3) J'aurai besoin pas la suite d'aide car je devrai recherché les postes libre au moin trois heure (ou 4,5,6...), et je ne sais pas encore bien comment je vait m'y prendre. Si vous savez parfaitement comment il faut faire ca m'interresse.


Ma question :
Suite à ce problème je me suis rendu sur la doc de Mysql, au niveau des date et je ne comprend pas cette chose:
(RIGHT(CURDATE(),5)<RIGHT(birth,5))

Voici la page ou j'ai était voir :
http://dev.mysql.com/doc/mysql/en/Date_calculations.html




Merci pour votre aide si précieuse !
Cultivons la bonne vibs !
Mr.White
le 18/05/2004 à 12:54
Mr.White
J'ai résolut le problème à la con de ma requête : Il n'y a pas de 'e' à Group .

Mais je but toujours pour récupérer les jours où au moin un poste est libre au moin trois heure consécutive.

C'est le trois heure consécutive qui pose problème car je croit voir à peu prés la solution pour trois heure dans la journée avec un count(date) (si je fait fausse route prévenait moi).
Mais ceci ne me donne pas des heure consécutive. Je me demande si c'est réellement possible avec une requête SQL.
Cultivons la bonne vibs !
LA GLOBULE
le 18/05/2004 à 12:55
LA GLOBULE
1) Essaye ca :
SELECT date FROM reservation
WHERE date >= "2004-05-18"
AND (poste1 = "nul"
OR poste2 = "nul"
OR poste3 = "nul"
OR poste4 = "nul"
OR poste5 = "nul"
OR poste6 = "nul"
OR poste7 = "nul"
OR poste8 = "nul"
OR poste9 = "nul"
OR poste10 = "nul")
ORDER BY date

2) cf 1)

3) Comment tu sais qu un poste est libre 3 heures ? (pour le moment, je comprend que les attributs postex disent si le poste est libre ou non, c'est ca ? ou bien est ce que quand postex=3, ben ca veut dire que le poste est libre 3 heures ?)

4) (RIGHT(CURDATE(),5)<RIGHT(birth,5))
En allant voir la page, j'ai retrouve cet exemple : le premier en fait.
Parce que cette phrase toute seule ne veut rien dire.

En revanche, l'ensemble complet :
mysql> SELECT name, birth, CURDATE(),
-> (YEAR(CURDATE())-YEAR(birth))
-> - (RIGHT(CURDATE(),5)<RIGHT(birth,5))
-> AS age
-> FROM pet;

La oui, ca veut dire quelque chose.
Le but de la requete c'est de calculer l'age d'une personne : Donc tu fais l'année d'aujourd hui moins l'année de naissance du gars.
Ensuite, tu compares la date du jour avec la date du jour de naissance de la personne (afin de savoir si tu dois ajouter une année ou non à l'age de la personne).

Donc pour résumer, pour le moment, tu as :
age = annee_today - annee_naissance.
Ensuite, tu fais un test qui va retourner 0 ou 1 sur le jour : RIGHT(CURDATE(),5)<RIGHT(birth,5) (en clair, si le jour d'aujourd hui est inferieur au jour de naissance, ce test retourne 1, dans le contraire il retourne 0).

Et au final, tu as donc :
age = annee_today - annee_naissance - 1 (ou 0 : tout depend du test sur le jour avec le signe <).
LA GLOBULE
le 18/05/2004 à 12:57
LA GLOBULE
Ton second message est arrive pendant que j ecrivais le mien : n'oublies pas de mettre des parentheses ( ) autour de tes postex. C'est important.
Mr.White
le 18/05/2004 à 13:54
Mr.White
1)Ta requête fonctionne mais me donne plusieurs fois la même date. Donc en faitec'est le group by qu'il me faut.

...
Cultivons la bonne vibs !
Mr.White
le 18/05/2004 à 14:03
Mr.White
Pour les parenthèses je suppose que je doit faire comme sur ta requête.

Merci pour l'explication right, je comprend tout maintenant.

Reste la 'requête évoluer'. En faite, sur chaque champ je compte avoir un nom ou un pseudo, enfin quelque chose qui puisse identifier un utilisateur. Si c'est nul c'est que ce n'est pas réservé, s'il y a quelque chose : c'est réservé.

Pour le moment j'en suis là avec cette requête :

select date, count(*) AS nbheure
from reservation
where date >= 20040518
and (poste1="nul"
or poste2="nul"
or poste3="nul"
or poste4="nul"
or poste5="nul"
or poste6="nul"
or poste7="nul"
or poste8="nul"
or poste9="nul"
or poste10="nul")
group by date
having nbheure>2

Ceci me donne les jours où au moin un poste est libre plus de 2 heure dans la journée.
BUT : Je doit retravailler le site d'une salle réseaux et je me suis dis que ca pourrai être bien de pouvoir réservé par internet. Donc cette requête évoluer sert à ce que l'utilisateur dise : "je veut réserver deux heure". Ce qui limitera ca recherche de créneaux libre. Ce que mon utilisateur souhaite est de réservé deux heure d'affiler et non deux heure dans la journé. Mais pour le moment je voit pas comment faire !
Cultivons la bonne vibs !
LA GLOBULE
le 18/05/2004 à 14:08
LA GLOBULE
Je repete ma question smiley

3) Comment tu sais qu un poste est libre 3 heures ? (de 14h à 17h par exemple) (pour le moment, je comprend que les attributs postex disent si le poste est libre ou non, c'est ca ? ou bien est ce que quand postex=3, ben ca veut dire que le poste est libre 3 heures ?)
Mr.White
le 18/05/2004 à 15:26
Mr.White
Postex n'est jamais égale à un nombre, c'est un nom (un identifiant sur celui qui à réservé, pour le moment cette identifiant est un nom)

Voici le schéma de la table :

date | heure | poste1 | poste2 | ...
2004-05-25 14:00:00 MOI nul ...
2004-05-25 15:00:00 MOI nul ...
2004-05-25 16:00:00 MOI nul ...

Dans cette exemple, l'utilisateur 'MOI' à réservé trois heure, de 14h à 17h pour le 25 mai. Le poste2 lui est libre trois heures d'affiler de 14h à 17h. C'est ainsi que l'on repère les heure consécutive.

Mais je conçoit bien qu'il doit existé une autre solution, car j'ai bien peur que là, ce n'est pas avec une requête sql sur cette table que j'arriverai à mes fin. Donc si tu à une idée pour une autres table (ou plusieurs autres tables) ...
Cultivons la bonne vibs !
Répondre
LoadingChargement en cours