Toon posts:

[mysql] query dubbele kamerboekingen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil via mysql controleren of er geen dubbele reserveringen zijn gedaan bij mn hotelreserveringssysteem

tabel KAMERRESERVERING
RESERVERINGSNR INT(10) NOT NULL
KAMERNR INT(3) NOT NULL
AANKOMSTDATUM DATE NOT NULL
VERTREKDATUM DATE NOT NULL

PRIMARY KEY RESERVERINGSNR, KAMERNR
UNIQUE KAMERNR, AANKOMSTDATUM, VERTREKDATUM

Zou er een SELECT opdracht mogelijk zijn om bv reserveringsnr's te krijgen van de reserveringen die dezelfde kamernr bevatten en in dezelfde periode vallen

bv
reserveringsnr 000123
kamernr 3
aankomstdatum 2002-03-05
vertrekdatum 2002-03-07

reserveringsnr 000124
kamernr 3
aankomstdatum 2002-03-05
vertrekdatum 2002-03-06

  • Jorn
  • Registratie: Juni 2001
  • Laatst online: 12:30
Misschien kun je beter bij het inserten al controleren of de kamer al geboekt is in die periode?

* Erkens is een sukkel en ramt in mirc op f5 :+
* XTerm GROOOOOOTE kuis houden op hd's :)


Verwijderd

Topicstarter
ja weet ik
maar ik wil geen andere script-taal gebruiken

kan ik dit beveiligen via mysql dan ?

unqique toevoegen is niet voldoende aangezien een aankomstdatum of vertrekdatum ook tussen andere datums kan liggen

  • Jorn
  • Registratie: Juni 2001
  • Laatst online: 12:30
Welke taal gebruik je om gegevens in de mysql te zetten?

* Erkens is een sukkel en ramt in mirc op f5 :+
* XTerm GROOOOOOTE kuis houden op hd's :)


Verwijderd

Topicstarter
mysql
insert into :)

ik wil het hiermee controleren (namelijk opdracht voor school)

  • Jorn
  • Registratie: Juni 2001
  • Laatst online: 12:30
dan zou ik het niet weten, vanuit php zou ik wel iets kunnen bedenken. :)

* Erkens is een sukkel en ramt in mirc op f5 :+
* XTerm GROOOOOOTE kuis houden op hd's :)


Verwijderd

Topicstarter
me 2, maar dat is niet de bedoeling
t wordt later met delphi, alleen moet et nu nog met alleen mysql

toch bedankt

Verwijderd

Natuurlijk kun je heel veel bereiken met SQL, maar de vraag is of MySQL het ondersteund. MySQL is dus een hele slechte DB-server om mee te oefenen. Neem liever een volwaardige als Oracle of Sybase.

Verwijderd

Topicstarter
opdracht luidt: mysql gebruiken


misschien iets van:
select * from kamerreservering
where (begindatum between begindatum and einddatum) or (einddatum between begindatum and einddatum);

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 13:47
Op dinsdag 05 maart 2002 20:04 schreef markvleth het volgende:
Natuurlijk kun je heel veel bereiken met SQL, maar de vraag is of MySQL het ondersteund. MySQL is dus een hele slechte DB-server om mee te oefenen. Neem liever een volwaardige als Oracle of Sybase.
Hohoho :o
MySQL kan veel SQL code uitvoeren. Dat het nog niet allemaal in versie 3.22 werkt dat kan kloppen, maar als je versie 4 gebruikt dan doet MySQL echt niet onder voor een 'volwaardige' database.

[on-topic]
Volgens mij kun je wel een select maken om dit te doen.
code:
1
SELECT * FROM kamerreservering WHERE kamernr = 3

En als je dan gebruik maakt van een sub-query dan kun je ook op datum zoeken.

* Postman is ietwat te laat ziet mij nu... :P

Verwijderd

Voorbeeldje (eigen tabelnamen):
code:
1
2
3
4
5
6
7
8
9
10
11
12
qryHotel:
SELECT tblReservering.Kamernummer, 
Count(tblReservering.Kamernummer) AS AantalReserveringenPerKamer
FROM tblReservering
GROUP BY tblReservering.Kamernummer
HAVING AantalReserveringenPerKamer>1

qryKamerNummers:
SELECT tblReservering.Kamernummer, tblReservering.KamerID
FROM qryHotel
LEFT JOIN tblReservering 
ON qryHotel.Kamernummer = tblReservering.Kamernummer

En de HAVING-voorwaarde van de overlappende datums is dan een kluifje waar je nog wel ff mee bezig bent

Verwijderd

Topicstarter
I'll check...

dit is niet de bedoeling
de waardes zullen nooit uit de tabel worden verwijderd
duzz

reserveringsnr|kamernr|aankomstdatum|vertrekdatum|
----123-------|--101--|-2002-03-05--|-2002-03-07-|
----124-------|--101--|-2002-03-08--|-2002-03-10-|
----125-------|--101--|-2002-03-11--|-2002-03-12-|
----126-------|--101--|-2002-03-13--|-2002-03-16-|

----127-------|--101--|-2002-03-06--|-2002-03-14-|
----128-------|--101--|-2002-03-14--|-2002-03-15-|

De laatste 2 moeten dus eruit gefilterd worden

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 13:47
Op dinsdag 05 maart 2002 20:20 schreef IJskoud het volgende:
Voorbeeldje (eigen tabelnamen):
code:
1
2
3
4
5
6
7
8
9
10
11
12
qryHotel:
SELECT tblReservering.Kamernummer, 
Count(tblReservering.Kamernummer) AS AantalReserveringenPerKamer
FROM tblReservering
GROUP BY tblReservering.Kamernummer
HAVING AantalReserveringenPerKamer>1

qryKamerNummers:
SELECT tblReservering.Kamernummer, tblReservering.KamerID
FROM qryHotel
LEFT JOIN tblReservering 
ON qryHotel.Kamernummer = tblReservering.Kamernummer

En de HAVING-voorwaarde van de overlappende datums is dan een kluifje waar je nog wel ff mee bezig bent
Damn, daar had ik niet aan gedacht. Had ik nou maar in mijn grote database bijbel gekeken, dan had ik ook een slim antwoord kunnen geven :+

Verwijderd

Topicstarter
Op dinsdag 05 maart 2002 20:22 schreef d0m0 het volgende:
I'll check...

dit is niet de bedoeling
de waardes zullen nooit uit de tabel worden verwijderd
duzz

reserveringsnr|kamernr|aankomstdatum|vertrekdatum|
----123-------|--101--|-2002-03-05--|-2002-03-07-|
----124-------|--101--|-2002-03-08--|-2002-03-10-|
----125-------|--101--|-2002-03-11--|-2002-03-12-|
----126-------|--101--|-2002-03-13--|-2002-03-16-|

----127-------|--101--|-2002-03-06--|-2002-03-14-|
----128-------|--101--|-2002-03-14--|-2002-03-15-|

De laatste 2 moeten dus eruit gefilterd worden
De bovenstaande queries zullen deze 2 rijen er niet uitfilteren hoor. Let op de datums !

iemand anders een idee ??!!

Verwijderd

Haha, het is hier geen query-fabriek. Ik geef je een voorzet met 2 queries die dubbele kamers checken en daar de ID's bijgeven. Daar heb ik netjes ondergezet dat je de overlappende datums er zelf in mag zetten...

Is een uitdaging, niet een straf!

Verwijderd

Topicstarter
hmmzz de vraag gaat net over de datums !!!
maar toch bedankt

Verwijderd

Maar daar heb je het antwoord zo ongeveer zelf op gegeven :?
Op dinsdag 05 maart 2002 20:10 schreef d0m0 het volgende:
(begindatum between begindatum and einddatum) or (einddatum between begindatum and einddatum);
Ik heb het niet voor je uitgeprobeerd maar je moet behoorlijk in de buurt zitten.

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

code:
1
2
3
4
5
6
7
select r1.*, r2.*
from   reservering r1
    ,reservering r2
where  r1.kamernr = r2.kamernr
and    r1.einddatum >= r2.begindatum
and    r2.eindatum >= r1.begindatum
and    r1.rec_id < r2.rec_id

Standaard overlap controle-tje.
Eigenlijk zou ik niet moeten doen, he, jouw huiswerk maken.

Je kan niet zeggen dat die twee er uit gefilterd moeten worden. Overlap kunnen ze nooit alleen veroorzaken je had net zo goed de anderen er uit kunnen filteren
Pagina: 1