Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Besoin d'aide... (technique)...merci :)

Par Lola le 29/6/2001 à 8:40:00 (#184710)

Bonjour,

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)

SELECT Room.idroom FROM Room, Reservation, Employee WHERE ...AND Room.idroom = 'br01'

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)

Dans l'idéale je voudrais avoir en réponse "c'est bon, tu peux réserver" ou "non, tu ne peux pas réserver".

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)

je nevois aucun lien entre tes tables


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)

une toute petite base :

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)

et comme ça ?


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)

Mais deja, il me semble qu'il y a un probleme :

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)

non bagend ya besoin de Employee pour le privilège.
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)

Jet : ça ne marche pas, il me renvoye la liste de toutes les salles..

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)

héhé envoie tout le sujet sinon on s'en sortira pas :D :D

c'est quoi d'abord 'br01' ?

Par Lola le 29/6/2001 à 11:05:00 (#184720)

D'accord,

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)

Contre ta photo je veux bien chercher :p
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)

SELECT Room.idroom
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)

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?

Par Lola le 29/6/2001 à 11:24:00 (#184724)

Je dois savoir si :

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

*voie de neuneu*
Ze veux une foto d'abord na ! :p

Par willoi le 29/6/2001 à 11:39:00 (#184727)

Je viens d'en parler avec un collègue qui fait du mysql.
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)

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)

Par Lola le 29/6/2001 à 11:43:00 (#184729)

J'ai pas acces... déjà que je devrais pas avoir accès à ce forum... En plus j'ai pas les droits Admin sur ma machine, donc je ne peux pas installer irc...

*sniff*

Par Jet le 29/6/2001 à 11:48:00 (#184730)

Hé Lola t'es aware ?

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)

MySQL said: You have an error in your SQL syntax near 'SELECT idroom FROM reservation WHERE datefrom <= '1999121313' and dateto >= '199' at line 2

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)

Ah je croyais que c'etait du Java
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)

Nouvelle tentative, essaye ça :




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)

C'est une aplique tripartite... Alors mon client c'est du java, mon serveur aussi, mais pas le serveur de la BD...

Par Jet le 29/6/2001 à 13:23:00 (#184738)

arf deux posts en même temps...

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)

Merci à vous tous de m'avoir aidé :)

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)

hihi le champagne c'est à 18H00, je boirais une coupe à ta requête :D :D

JOL Archives 1.0.1
@ JOL / JeuxOnLine