[sql] problème at question sur date

Mr.White Messages postés 252 Statut Membre -  
Mr.White Messages postés 252 Statut Membre -
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 !

3 réponses

el gringo
 
Salut !

Je ne suis absolument pas un pro du sql, ce qui fait que je ne pourrais te repondre qu'a la 1ere question. Je pense que ton erreur vient du groupe a remplacer par un group sans le 'e'...
Pour le reste, desole de ne pas pouvoir t'aider.

A+
0
Mr.White Messages postés 252 Statut Membre 53
 
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.
0
Vincent B
 
Salut Mr White,

Pour répondre à ta question concernant l'exemple de la doc SQL, la partie de code que tu nous a montré correspond à la différence de jour entre tes deux dates, sachant que la première partie correspond à la différence entre les deux années de ta date.

Explication du code fourni :

MySQL en registre la date sous la forme yyyy-MM-dd.

le code prend les 5 caractères à droite de la chaine date, donc MM-dd : comme la chaine commence par les mois, il trie bien correctement la date, ce qui n'aurait pas été le cas si tu avais utilisé un format français.

Ce que tu cherches à faire c'est la même chose, mais avec les heures, donc ce n'est pas l'exemple qui convient pour toi.

Tu ne fournis pas la structure complète de ta table. Mais d'après ce que j'ai compris tu as un champ date et un champ poste qui est null s'il n'y a pas de reservation, et qui contient une heure dans le cas contraire. Le champ poste semple correspondre à un type yyyy-MM-dd hh:mm:ss (timestamp pour MySQL de mémoire je crois).

Fais attention aux méthodes dépréciées pour les dates. Je pense qu'avec ces explications, tu pourras retrouver les bonnes méthodes pour réaliser ce que tu veux. A titre personnel, je pense que count(date) n'est pas un bon choix.

Si tu rencontres d'autres difficultés, n'hésite pas à me recontacter.


Amicalement,


Vincent B
0
Mr.White Messages postés 252 Statut Membre 53
 
Merci bien Vinent B pour toutes c'est explication. Je vait dés à présent me pencher sur le problème.

Sinon, la structure de ma base correspond à ceci :

date : champ date
horaire : champ time
poste1 : champ varchar(32)
poste2 : champ varchar(32)
poste3 : champ varchar(32)
...
poste10 : champ varchar(32)

Les champs poste vont contenir le pseudo ou quelque chose pour indentifier l'utilisateur réservant ce poste à cette heure.

Mais cette table est assez mourde et peu maniable. Je compte donc la déviser en plusieur table qui sont pour le moment :

HORAIRES:
horaire : champ time
// Correspond au heure d'ouverture

POSTES:
poste : champ varchar(10)
// correspond à la liste des postes

RESERVATION:
// Pas encore totalement défini
ID : champ int(6)
date : champ date
horaire : champ time
poste : chapmp varchar(10)
les champ suivant serviront à définir l'utilisateur
// Le champ id n'est peut-être pas necessaire, je vai certainement utiliser la date, l'heure et le poste comme identifient.

Que penser vous de cette nouvelle structure de base ?
0