Archives des forums MMO/MMORPG > Forums divers > La Taverne > Besoin d'aide... (technique)...merci :)
Besoin d'aide... (technique)...merci :)
Par Lola le 29/6/2001 à 8:40:00 (#184710)
Je suis encore étudiante et je suis cette semaine une petite (toute petite) introduction aux bases de données(MySQL).
Je patauge depuis hier soir dans la mélasse avec une requète...
Comme je sais qu'il y a plein de gens compétents dans le domaine technique dans ce joli forum, peut-être que qqn pourra m'aider.
Voici la requète :
SELECT Room.idroom FROM Room, Reservation, Employee
WHERE Employee.privilegenb <= Room.privilegenb
AND Employee.Idemployee = 'sac'
AND Room.idroom = 'br01'
AND
(
( 'DateDebut' NOT BETWEEN Reservation.datefrom AND Reservation.dateto
AND 'DateDebut' NOT BETWEEN Reservation.datefrom AND Reservation.dateto
AND 'DateDebut' != Reservation.datefrom
AND 'DateFin' != Reservation.dateto
AND Reservation.datefrom NOT BETWEEN 'DateDebut' AND 'DateFin'
AND Reservation.dateto NOT BETWEEN 'DateDebut' AND 'DateFin'
)
OR
Room.idroom NOT IN (Reservation.idroom)
)
Comme vous pouvez le constater, elle demande si une salle est réservée (ou pas). Si elle ne l'est pas elle me renvoie le nom de la salle. Mon problème est que, si la salle est déjà réservée pour la période demandée, la commande me renvoie quand même le nom de la salle... Comme si elle n'était pas réservée...
Et déjà Merci d'avoir pris quelques minutes de votre temps pour me lire, si ce n'est pour me répondre.
______________________________
Qui ne tente rien, n'a rien ;)
Par Jet le 29/6/2001 à 9:28:00 (#184711)
Si je ne m'abuse tu passes en "WHERE CONDITION" la valeur de la donnée que tu veux récupérer (la seule donnée d'ailleurs), est-ce bien logique ? :confused:
[ 29 juin 2001: Message édité par : Jet ]
Par lola le 29/6/2001 à 9:45:00 (#184712)
Ici, j'ai comme résultat le nom de la salle que j'ai réservé (="c'est bon, tu peux réserver") ou un champs égale à null (="non, tu ne peux pas réserver").
C'est peut-être une logique bizarre, mais c'est tout ce que j'ai trouvé...
Par willoi le 29/6/2001 à 10:03:00 (#184713)
SELECT Room.idroom FROM Room, Reservation, Employee
WHERE Employee.privilegenb <= Room.privilegenb
AND Employee.Idemployee = 'sac'
AND Room.idroom = 'br01'
AND
(
Pourkoa tu repetes 2 fois la meme condition ??
( 'DateDebut' NOT BETWEEN Reservation.datefrom AND Reservation.dateto
AND 'DateDebut' NOT BETWEEN Reservation.datefrom AND Reservation.dateto
????
AND 'DateDebut' != Reservation.datefrom
AND 'DateFin' != Reservation.dateto
AND Reservation.datefrom NOT BETWEEN 'DateDebut' AND 'DateFin'
AND Reservation.dateto NOT BETWEEN 'DateDebut' AND 'DateFin'
)
OR
Room.idroom NOT IN (Reservation.idroom)
)
Honnetement je fais du sql tous les jours mais là c'est un peu difficile de t'aider il faudrait que tu m'explique la structure de ta base de données STP pour que je puisse t'aider car là je comprends pas grand chose
Par Lola le 29/6/2001 à 10:10:00 (#184714)
Table : Employee
| *idemployee | firstname | lastname | priviligenb |
Table : Room
| *idroom | name | privilegenb | costH |
Table : Reservation
| idroom | idemployee | datefrom | dateto |
- Une personne ne peut pas réserver une salle ayant un niveau de privilège plus grand
- 'DateDebut' et 'DateFin' sont deux variables contenant les horaires de la réservation à faire. par exemple '2001121314' (YYYYMMDDHH). Dans la requète ils ne sont pas comme ça, mais je pensais que de leur donner un nom était plus facile
[ 29 juin 2001: Message édité par : Lola ]
Par Jet le 29/6/2001 à 10:30:00 (#184715)
SELECT Room.idroom FROM Room, Reservation, Employee
WHERE Employee.privilegenb <= Room.privilegenb
AND Employee.Idemployee = 'sac'
AND
(
(Room.idroom = 'br01'
AND 'DateDebut' NOT BETWEEN Reservation.datefrom AND Reservation.dateto
AND 'DateDebut' != Reservation.datefrom
AND 'DateFin' != Reservation.dateto
AND Reservation.datefrom NOT BETWEEN 'DateDebut' AND 'DateFin'
AND Reservation.dateto NOT BETWEEN 'DateDebut' AND 'DateFin'
)
OR
Room.idroom NOT IN (Reservation.idroom)
)
en fait j'ai juste mis la conditon Room.idroom dans les parenthèses, ça me semble plus logique mais bon sur le papier c'est pas trop évident de débugger ton truc :D :D
[ 29 juin 2001: Message édité par : Jet ]
Par bagend le 29/6/2001 à 10:32:00 (#184716)
SELECT Room.idroom FROM Room, Reservation, Employee
et
Table : Employee
| *idemployee | firstname | lastname | priviligenb |
Tu cherches un champs qui ne se trouve pas ds la table employer, donc tu peux virer FROM employee non ?
Ensuite tu cherche l'employer SAC et la salle " Br01"
Donc si la salle existe , c'est sur qu'elle te renverra a la salle Bro1 si elle existe non ?
C juste des remarque p e pas fondé :)
Par willoi le 29/6/2001 à 10:48:00 (#184717)
Et pour salle='br01' ya un AND associé donc il se peut que rien ne s'affiche
Par Lola le 29/6/2001 à 10:50:00 (#184718)
bagend: Employee.privilegenb <= Room.privilegenb AND Employee.Idemployee = 'sac'
J'utilise là les Employee
Sinon vous pouvez me proposer une toute autre commande. Tant qu'elle revoie qqchose de différent si je peux réserver ou pas.
[ 29 juin 2001: Message édité par : Lola ]
Par Jet le 29/6/2001 à 10:56:00 (#184719)
c'est quoi d'abord 'br01' ?
Par Lola le 29/6/2001 à 11:05:00 (#184720)
le sujet c'est réalisation d'un client(léger)/serveur en java permettant une gestion tres simple de salles (réservation, cout, etc...)
T'as jusqu'à cet aprem 3h pour le faire :) (et avec un chtit rapport)
'br01' c'est l'id d'une salle... batiment B Rez-de-chaussée salle 01
Par Jet le 29/6/2001 à 11:10:00 (#184721)
Sinon je voulais que tu nous donne la liste des contraintes, le cahier des charges, en fin le truc que t'as essayé de traduire en requête :p
Par willoi le 29/6/2001 à 11:11:00 (#184722)
FROM Room
WHERE Room.idroom Not In (select idroom from reservation where datefrom<='datefin' and dateto>='datedebut')
Voilà j'ai préferé faire une requete imbriquée, je l'ai testé et ca marche.
Je pense que tu peux partir sur ca en ajoutant tes critères sur le privilège et la salle en question
Par Lola le 29/6/2001 à 11:18:00 (#184723)
SELECT Room.idroom
FROM Room
WHERE Room.idroom Not In ( SELECT idroom FROM reservation WHERE datefrom <= '1999121313' and dateto >= '1999121211')
MySQL said: You have an error in your SQL syntax near 'SELECT idroom FROM reservation WHERE datefrom <= '1999121313' and dateto >= '199' at line 2
------
Et le test du nom de la personne?
Par Lola le 29/6/2001 à 11:24:00 (#184724)
- une salle existante
- peut être réservée par une personne existante
- ayant un niveau de privilège suffisant (1 = Directeur(peut tout réserver), 5 = concierges(peut réserver seulement les pires salles))
- depuis la date 'DateDebut' (YYYYMMDDHH)
- jusqu'à la date 'DateFin' (YYYYMMDDHH)
Une salle peut être réservée de 6 à 7h, et aussi de 7 à 8h. Mais elle ne peut pas être réservée si elle est déjà réservée ne serait-ce qu'une heure pendant le temps demandé
Voilà, je crois que c'est tout...
*prie pour avoir une solution avant 3h*
Par willoi le 29/6/2001 à 11:32:00 (#184725)
Débat lancé par Lola:
SQL-query:
SELECT Room.idroom
FROM Room
WHERE Room.idroom Not In ( SELECT idroom FROM reservation WHERE datefrom <= '1999121313' and dateto >= '1999121211')
MySQL said: You have an error in your SQL syntax near 'SELECT idroom FROM reservation WHERE datefrom <= '1999121313' and dateto >= '199' at line 2
------
Et le test du nom de la personne?
peut-être que pour mysql il faut ajouter quelques parenthèses du style:
((Room.idroom) Not In ( SELECT idroom FROM reservation WHERE (datefrom <= '1999121313' and dateto >= '1999121211')))
De plus tes dates sont bizarres :
1999121211 --> 10 caractères ????
Par Jet le 29/6/2001 à 11:34:00 (#184726)
Ze veux une foto d'abord na ! :p
Par willoi le 29/6/2001 à 11:39:00 (#184727)
Il me dit que c'est juste un pb de syntaxe sur les dates.
si t'as accès à IRC va voir sur #mysql ou #phpfr sur undernet.org t'auras une réponse rapide
Par Lola le 29/6/2001 à 11:41:00 (#184728)
On nous a fortement déconseillé d'utiliser le type date. Car, nous a-t-on dit, il n'est pas implémenté de la même manière partout et il parrait qu'il est un peu bordélique... ( En plus ,on a eut l'introduction à MySQL lundi, alors on a largement pas tout vu)
Avec des string(char(10)), si on mets les information dans le bon ordre, on peut réaliser des comparaison assez facilement. (enfin, je crois)
Par Lola le 29/6/2001 à 11:43:00 (#184729)
*sniff*
Par Jet le 29/6/2001 à 11:48:00 (#184730)
Tu as un rhume et tu fais toujours SNFFFF. Faut qu'tu t'mouches. Tu veux un mouchoir? Alors y'a des gens comme ça qui ne sont pas AWARE ; moi chuis AWARE tu vois ? Je suis - c'est un exemple, je suis AWARE ...
Y'a des gens qui n'ont pas réussi, parce qu'ils ne sont pas AWARE, ils n'sont pas au courant, ils n'sont pas à l'attention de savoir qu'ils existent. Les pauvres, ils savent pas! ... Il faut réveiller les gens, c'est à dire qu'il y a des gens qui font leur travail, qui font leurs études, ils ont un diplôme, ils sont contents et tout ça ...
copyright JCVD & C&U :D
Par willoi le 29/6/2001 à 11:52:00 (#184731)
Débat lancé par Lola:
non plus... toujours des erreurs de syntaxes..
On nous a fortement déconseillé d'utiliser le type date. Car, nous a-t-on dit, il n'est pas implémenté de la même manière partout et il parrait qu'il est un peu bordélique... ( En plus ,on a eut l'introduction à MySQL lundi, alors on a largement pas tout vu)
Avec des string(char(10)), si on mets les information dans le bon ordre, on peut réaliser des comparaison assez facilement. (enfin, je crois)
Essaye d'editer ta requete à l'écran pour voir ce que tu passe au serveur
si t'est en Java avec
System.out.println("marequetesql");
ca doit passer
et puis après tu me la passe
Par willoi le 29/6/2001 à 11:53:00 (#184732)
parceque apparement elle est pas complète ta requete là il manque des parenthèses
Par Lola le 29/6/2001 à 12:01:00 (#184733)
Essaye d'editer ta requete à l'écran pour voir ce que tu passe au serveur
J'ai une petite interface graphique qui est "phpMyAdmin 2.2.0pre5 (unofficial stable-branch)". Avec ça j'envoye directement la commande à la BD et j'ai aussi le résultat sans passer par mon applic. Quand à la requète j'ai fait du copier coller...
Par Lola le 29/6/2001 à 12:32:00 (#184734)
Hé Lola t'es aware ? (...)
Rien compris.... (pour changer)
*commence à stresser un peu*
Par willoi le 29/6/2001 à 12:39:00 (#184735)
Bon je vais voir si je peux le tester ici avec phpmyadmin paceque pour le moment je l'ai fait avec Access
Tes types de données de champ c'est bien :
Idroom : numerique
datefrom : texte 10
dateto : texte 10
Par Jet le 29/6/2001 à 13:19:00 (#184736)
SELECT Room.idroom FROM Room, Reservation, Employee
WHERE Employee.privilegenb <= Room.privilegenb
AND Employee.Idemployee = 'sac'
AND Room.idroom = 'br01'
AND
(
( 'DateDebut' NOT BETWEEN Reservation.datefrom AND Reservation.dateto
AND 'DateFin' NOT BETWEEN Reservation.datefrom AND Reservation.dateto
AND 'DateDebut' != Reservation.datefrom
AND 'DateFin' != Reservation.dateto
AND Reservation.datefrom NOT BETWEEN 'DateDebut' AND 'DateFin'
AND Reservation.dateto NOT BETWEEN 'DateDebut' AND 'DateFin'
AND Room.idroom = Reservation.idroom
)
OR
Room.idroom NOT IN (Reservation.idroom)
)
Tu utilises la table reservation mais tu ne fait pas de lien entre l'id de reservation et l'id de room il me semble
[ 29 juin 2001: Message édité par : Jet ]
Par Lola le 29/6/2001 à 13:19:00 (#184737)
Par Jet le 29/6/2001 à 13:23:00 (#184738)
Par Jet le 29/6/2001 à 13:30:00 (#184739)
Débat lancé par Lola:
Je dois savoir si :
Une salle peut être réservée de 6 à 7h, et aussi de 7 à 8h. Mais elle ne peut pas être réservée si elle est déjà réservée ne serait-ce qu'une heure pendant le temps demandé
Y'a pas un cafouillage aussi à ce niveau dans ta requète, je comprends pas bien l'explication là, 6h à 7h , 7h à 8h c l'heure de la demande de reservation ?
Si tel est le cas il faut l'heure système ou l'heure de l'enregistrement de la demande?
:confused: :confused: hihi je capte rien :D
Par Lola le 29/6/2001 à 14:55:00 (#184740)
Dans 10mn je dois avoir tout rendu. De toutes manières c'est pas trop grave si tout ne fonctionne pas parfaitement.
Allez,
CHAMPAGNE POUT TOUT LE MONDE!!!!
*allume la musique*
QUE TOUT LE MONDE S'AMMUSE!!!
Par Jet le 29/6/2001 à 15:11:00 (#184741)
JOL Archives 1.0.1
@ JOL / JeuxOnLine