Date range test

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Scrum Master

TenneT is hard groeiend om de onze ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Scrum master op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je begeleidt twee teams binnen de afdeling Platform Services (PLS). Je helpt mee de devops manier van werken van de teams verder door te ontwikkelen. Je helpt de PO bij het managen van de product backlog; het voorbereiden van

Bekijk vacature »

Back-end programmeur

Functieomschrijving Heb jij recent jouw HBO ICT diploma in ontvangst mogen nemen? Of ben je toe aan een nieuwe uitdaging? Voor een erkende werkgever in regio Waalwijk zijn wij op zoek naar een back-end developer. Kennis of ervaring met C# & SQL is een must! Je houdt je bezig met het ontwikkelen van nieuwe functionaliteiten; Je bent verantwoordelijk voor de beheer en ontwikkeling van de software; Je draagt bij aan de implementatie van aanpassingen, verbeteringen en aanvullingen in de C# based applicaties; Je test de software en ontwikkelt deze door; Je brengt de aanpassingssuggesties van klanten in kaart, om ze

Bekijk vacature »

Gezocht: Ervaren VB6 developer met C# ambitie!

Bedrijfsomschrijving Dit bedrijf is een vooraanstaande softwareleverancier die gespecialiseerd is in het ontwikkelen van software pakketten voor autoschade herstel bedrijven. De software wordt gebruikt door meer dan de helft van alle autoschade herstel bedrijven in Nederland. Het team van professionals is op zoek naar getalenteerde collega developers die hun vaardigheden willen inzetten om het bedrijf te laten groeien. Functieomschrijving Voor dit bedrijf zoek ik een ervaren VB6 / VB.NET developer met interesse om op termijn verder te gaan in C#. In deze functie ben je verantwoordelijk voor het onderhouden van de bestaande softwarepakketten. Een deel van de code is nog

Bekijk vacature »

REMOTE - Front-end Angular developer

Functie Het IT-team bestaat momenteel uit de IT Manager, 2 back-end developers, 1 fullstack developer, 1 designer en een DevOps engineer. Ze zijn momenteel op zoek naar een ervaren Front-end developer die autonoom en gedisciplineerd aan de slag gaat, en bij aanvang als enige developer met hun Front-end applicaties bezig is. Wel hebben ze de ambitie om hier snel een 2e developer bij te vinden die jij dan ook zal kunnen aansturen/begeleiden. Je zult aan de slag gaan met het doorontwikkelen van hun bestaande UI in Angular. Maar ook het ontwikkelen van een mobiele app. Hierbij hechten ze veel waarde

Bekijk vacature »

Fullstack Developer

Functieomschrijving Heb je kort geleden jouw HBO diploma ICT development behaald? Of zit je nog aan het begin van je carrière en heb je affiniteit met C#.NET? Voor een erkende werkgever in de omgeving van Oosterhout zijn wij op zoek naar een fullstack developer. Als C#.NET developer werk je samen met een vooruitstrevend team aan het ontwikkelen van maatwerk software voor klanten. Je hebt affiniteit met SQL, maar nog belangrijker is dat je kennis en ervaring hebt met C#.NET. Jouw werkzaamheden zien er als volgt uit: Het ontwikkelen van onze high-availability en high-performance backend; Je begint de dag rond 8:30

Bekijk vacature »

PHP developer

Functie Voor een opdrachtgever in omgeving Leiden zijn wij op zoek naar een PHP developer die affiniteit heeft met C++. Ben jij reeds afgestudeerd of heb je al een paar jaar ervaring? Lees snel verder en kijk of dit iets voor jou is! Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen C / C++ / PHP. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten goed verlopen. Je gaat klanten ondersteunen op het gebied van

Bekijk vacature »

PHP Laravel developer

Functie omschrijving Weet jij alles van Laravel en krijg je energie van het ontwikkelen van software hiermee? Laat snel wat van je horen want wij zoeken een PHP/Laravel developer in regio 's-Hertogenbosch. Jouw taken zullen bestaan uit: Softwareapplicaties ontwikkelen en verder optimaliseren in veel diverse projecten op basis van Agile/Scrum. Uitleg geven over software en applicaties Klantcontact hebben over bestaande applicaties. Documentatie schrijven over applicaties. Techstack: PHP, Laravel, HTML, CSS, Javascript. Bedrijfsprofiel Deze organisatie zit in de regio van 's-Hertogenbosch en is een klein softwarebedrijf. Er werken ongeveer 15 medewerkers, verdeeld in meerdere teams, zoals back-end en front-end development, projectmanagement

Bekijk vacature »

PHP Developer

Functie omschrijving Voor een bedrijf in Den Bosch zoek ik een PHP Developer, die al wat werkervaring heeft. Jij gaat aan de slag met de verdere professionalisering van de interne applicaties en software. In de functie ga je verder: Verdere ontwikkeling eigen CRM systeem, vooral middels PHP; Bouwen van verschillende API's & koppelingen; Meedenken om de software/applicaties te verbeteren/optimaliseren; Aan de slag met de interne tooling. Bedrijfsprofiel Dit bedrijf is actief binnen de telecombranche. Het hoofdkantoor zit in regio van Den Bosch en er werken ruim 70 medewerkers, verdeeld over verschillende afdelingen. De afdeling Development bestaat uit vijf collega's, onder

Bekijk vacature »

.NET developer

Functie Als .NET developer wordt jij onderdeel van ons ICT team. In dit multidisciplinaire team ben jij samen met onze senior .NET ontwikkelaar en medior .NET ontwikkelaar verantwoordelijk voor ons ERP systeem. In dit systeem (Navision) ga jij leren ontwikkelen. Wij bieden jou dan ook een gedegen opleiding aan, samen met de ondersteuning van onze Senior .NET developer. Daarnaast ga jij aan de slag met ons portaal geschreven in Sharepoint. Verder ben jij verantwoordelijk voor EDI verkeer en het ontwikkelen binnen het ERP systeem en andere toepassingen en rapportages. Van jou wordt verwacht dat jij het proces goed leert kennen

Bekijk vacature »

.NET Developer

Functie omschrijving .NET developer met ervaring gezocht! Voor een softwarebedrijf in de regio Veenendaal zijn wij op zoek naar een .NET developer met een aantal jaar ervaring. Jij bent zowel zelfstandig als in teamverband verantwoordelijk voor het ontwikkelen en verbeteren van bestaande producten. Verder ben je bezig met nieuwbouw van websites, webapplicaties en mobiele applicaties die zowel intern als extern gebruikt worden. Je werkt hierbij nauw samen met andere developer, productmanagers en productspecialisten om zo mooie producten te creëren. Bedrijfsprofiel De organisatie waar je voor gaat werken is een snelgroeiende softwareleverancier en allround dienstverlener. Deze organisatie heeft zowel klanten die

Bekijk vacature »

Full Stack PHP Developer

Functieomschrijving Ervaren PHP Developer gezocht! Wij zijn op zoek naar een ervaren PHP Developer die het IT team van een organisatie in de regio Ermelo gaat versterken. Voor deze functie zijn we op zoek naar een enthousiaste en breed georiënteerde IT-er die deze innovatieve organisatie nog een stap verder gaat brengen. Wij zijn op zoek naar iemand die communicatief goed is en die zelfstandig problemen op kan lossen. Je bent verantwoordelijk voor het samenwerken met een externe partij het is hierbij jouw taak om deze partij uit te dagen op het geleverde werk. Het schrijven van concepten aan de AI

Bekijk vacature »

C# .NET Developer IoT SQL Server

Samengevat: Wij ontwikkelen innovatieve oplossingen om apparaten en bezittingen op een eenvoudige en flexibele manier te beveiligen. Ben jij een C# .NET developer? Heb jij ervaring met C# en SQL server? Vaste baan: C# .NET Developer IoT HBO €3.200 - €4.500 Deze werkgever is gespecialiseerd in hoogwaardige GSM/GPRS alarm- en telemetrietechnologie. Met een eigen productlijn en klantspecifieke ontwikkelingen biedt deze werkgever oplossingen om op afstand te meten, melden, loggen en aansturen, ook op plaatsen zonder stroomvoorziening. Onze producten worden gekarakteriseerd door flexibiliteit in de configuratie, betrouwbaarheid en een extreem laag stroomverbruik. Zij werken voor MKB klanten. Deze werkgever heeft veel

Bekijk vacature »

C# Developer

Functie omschrijving Voor een softwarebedrijf in de omgeving van Veghel zijn we op zoek naar een C# developer. Word jij blij van ontwikkelen in C# en .NET? Lees dan snel verder! Jouw werkzaamheden zullen er als volgt uit gaan zien: Door middel van ASP.NET, MVC Framework en C# ga je webshops, websites en webapplicaties ontwikkelen. Je zorgt voor de optimalisatie van bestaande software en de automatisering van bedrijfsprocessen. Op basis van de wensen van de klant ga je samen met je collega's ga je op zoek naar de juiste oplossingen en je gaat dit uitwerken tot een mooi eindproduct. Bedrijfsprofiel

Bekijk vacature »

Senior Front-end developer (React)

Functie Met een ontwikkelafdeling van ruim 20 collega’s is dit zo ongeveer de helft van alle medewerkers. De software(ontwikkeling) is dan ook de drijvende kracht binnen de organisatie. Ze werken aan het verbeteren dan de bestaande, maar zeker ook nieuwe producten. De software bestaat uit verschillende (React) webapplicaties, maar ook een mobile (React native) app. Hierdoor kom je met verschillende uitdagingen in aanraking en is Mobile kennis natuurlijk mooi meegenomen. De software wordt door vele duizenden professionals dagelijks gebruikt en bevatten grote hoeveelheden data. Aan het team de uitdaging om hierin de best mogelijke gebruiksvriendelijkheid neer te zetten door gebruik

Bekijk vacature »

Software Developer PHP

Functie omschrijving We are looking for a dutch native speaker Voor een opdrachtgever in de regio van Geldrop ben ik op zoek naar een Software Developer PHP. Jij krijgt een rol met veel verantwoordelijkheid in een groeiende organisatie. In deze functie werkt je voornamelijk remote en op een vast moment kom je met het team samen, om samen te werken en nieuwe doelen te bepalen. Wat ga je doen? Je wordt verantwoordelijk voor de interne applicatie; Je zorgt voor de doorontwikkeling van de applicatie: zowel back-end, front-end; De basis van het werk betreft front-end technieken; Periodiek bepaal je samen met

Bekijk vacature »

Pagina: 1 2 volgende »

Lars Anderson

Lars Anderson

18/12/2012 12:20:20
Quote Anchor link
Ik heb een mooie hersenbreker voor jullie:

De feiten:
- Ik heb 2 kamers beschikbaar.
- Een kamer kan voor één of meerdere dagen gereserveerd worden.
- Een date range mag op dezelfde dag beginnen als een andere date range eindigt

De query:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$query
= "
SELECT *
FROM reserveringen
WHERE `reservering_eind` > '"
. $datum1 . "'
AND `reservering_start` < '"
. $datum2 . "'
"
;
?>




Met behulp van bovenstaande query kan ik bepalen hoeveel reserveringen er zijn in de gekozen date range van $datum1 tot $datum2. Als er 2 resultaten zijn, betekent dit dat er geen kamers beschikbaar zijn.

Echter als de date range die ik wil testen bijvoorbeeld een week of een maand beslaat. Dan kunnen er zelfs meer dan 2 reserveringen gevonden worden. Ook als alle gevonden reserveringen na elkaar op kamer 1 geboekt kunnen worden.

Hoe kan ik nu testen of de gevonden reserveringen elkaar overlappen. Want als ze dat niet doen zou de kamer wel nog beschikbaar zijn.

Voorbeeld:
reservering #1: 01 jan 2012 tot 02 jan 2012
reservering #2: 02 jan 2012 tot 03 jan 2012
reservering #3: 03 jan 2012 tot 04 jan 2012

Test input:
reservering #4: 01 jan 2012 tot 04 jan 2012

Bovenstaande (foute) query geeft terug dat er reeds 3 reserveringen zijn in periode 01 tot 04 jan 2012. De query zou terug moeten geven dat er van de 2 beschikbare kamers er slechts max 1 in gebruik is tijdens de gevraagde periode.
Iemand enig idee hoe ik dit kan doen?

EDIT:
Vincent opperde het volgende:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$query
= "
SELECT COUNT(*), kamer_id
FROM reserveringen
WHERE reservering_eind >  $datum1
AND reservering_start <  $datum2
GROUP BY kamer_id
HAVING COUNT(*)=0
"
;
?>

Echter de reserveringen hebben niet altijd een kamer_id. Als een reservering toegevoegd word, wordt er niet direct een kamer_id gekoppeld. Dit kan later gedaan worden.

Iemand een idee over hoe dit op te lossen?
 
PHP hulp

PHP hulp

22/12/2024 19:52:55
 
No One

No One

18/12/2012 12:25:44
Quote Anchor link
de query omkeren. dus eigenlijk kijken of je nog kamers overhebt in die periode.
dan selecteer je het aantal reserveringen, en dat aantal vergelijk je met het aantal kamers dat je hebt. dan heb je bijvoorbeeld 45 reserveringen, 50 kamers, kan er voor die periode nog 5x een reservering geplaatst worden. echter zou ik die query wat ingewikkelder maken..want als je al je kamers geboekt zijn van 10 december tot 27 december..gaat reserveren van bijvoorbeeld 8 december tot 15 december natuurlijk ook niet... alleen 8 en 9 december zijn dan nog kamers vrij ;)
Gewijzigd op 18/12/2012 12:29:28 door No One
 
Lars Anderson

Lars Anderson

18/12/2012 12:30:09
Quote Anchor link
Volledig mee eens, maar hoe ga ik dat aanpakken?
 
John D

John D

18/12/2012 12:30:14
Quote Anchor link
en >= $datum alsmede <= $datum gebruiken.
 
Erwin H

Erwin H

18/12/2012 12:30:27
Quote Anchor link
Je zal voor elke dag tussen je begin en einddatum moeten bepalen hoeveel reserveringen er zijn. Is er maar 1 dag in die periode waar er evenveel reserveringen zijn als dat er kamers zijn dan kan je niet meer reserveren.

Maar dan heb je nog niet het probleem opgelost van welke kamer. Zolang niet alle reserveringen aan kamers zijn toegewezen zal je dat vrees ik ook niet 1-2-3 lukken.


Toevoeging op 18/12/2012 12:31:55:

John D op 18/12/2012 12:30:14:
en >= $datum alsmede <= $datum gebruiken.

Nee. Een reservering voor 1 nacht loopt van 1 januari tot 2 januari. Maar op 2 januari is die kamer wel weer beschikbaar.
 
No One

No One

18/12/2012 12:40:06
Quote Anchor link
@Erwin, mee eens, maar niet helemaal...die kamer_id komt ergens vandaan dus ik neem aan dat hij een tabel heeft met kamers count(kamer_id) as c from kamers en je hebt het aantal kamers..
 
Erwin H

Erwin H

18/12/2012 12:43:07
Quote Anchor link
@Henze, op welk punt heeft dat betrekking?
 
No One

No One

18/12/2012 12:44:53
Quote Anchor link
Het probleem van de kamers...overigens alle kamers die niet toegewezen zijn - het aantal reserveringen zonder kamers = aantal vrije kamers
 
Erwin H

Erwin H

18/12/2012 12:50:10
Quote Anchor link
Maar welke kamer? Stel je wilt een kamer een maand lang. Het feit dat er elke dag nog 1 kamer vrij is, wil niet zeggen de zelfde kamer elke dag. Zolang niet elke reservering aan een kamer is toegewezen kan je dus niet zeggen dat die reservering mogelijk.
 
No One

No One

18/12/2012 13:02:26
Quote Anchor link
Erwin H op 18/12/2012 12:50:10:
Maar welke kamer? Stel je wilt een kamer een maand lang. Het feit dat er elke dag nog 1 kamer vrij is, wil niet zeggen de zelfde kamer elke dag. Zolang niet elke reservering aan een kamer is toegewezen kan je dus niet zeggen dat die reservering mogelijk.


zodra je reserveert weet het systeem: maakt niet uit welke kamer deze 4 zijn die hele periode nog vrij... bij een volgende reservering bij een soort gelijke periode ziet ie: oh, nog 3 vrij...enzv...in die periode heb je dan 4 kamers verdeeld over 4 personen die elke een ander bereik hebben binnen die periode..maar dat maakt niet uit...er is altijd een kamer voor wie dan ook. met drie kamers in de periode van 1 december tot 10 december: jij komt van 4 tot 7, ik kom van 1 tot 6 en iemand anders komt de gehele periode. dan is het duidelijk dat er sowieso 1 kamer vrij is van 1 tot 4 en van 6 tot 10 als die kamers die dagen geboekt zijn kan je op het scherm waarin je als nog een kamer toekent tonen welke kamers dus vrij zijn op de gereserveerde datums..
Gewijzigd op 18/12/2012 13:03:48 door No One
 
Lars Anderson

Lars Anderson

18/12/2012 13:10:13
Quote Anchor link
Ik zal proberen het iets verder toe te lichten:
Ik heb kamer type A, B en C
Er zijn 2 type A kamers (kamernummer 1A en 2A), 4 type B en 6 type C kamers.

Nu is er een reservering van 1 dec tot 2 dec in een type A kamer (de reservering is toegewezen aan kamernummer 1A)
en er is een reservering van 2 dec tot 3 dec (deze reservering is nog niet toegewezen aan een kamer).

Nu wil ik een reservering gaan doen van 1 dec tot 3 dec.

Met mijn eerste query krijg ik alle reserveringen terug in de periode 1 dec tot 3 dec. Dit zijn er 2. Dit is gelijk aan het aantal beschikbare kamers dus wordt mijn reservering geweigerd. MAAR dit is natuurlijk niet zo. Want ik kan de tweede reservering toewijzen aan kamernummer 1A. Kamernummer 2A is dan nog gewoon beschikbaar in deze periode.

Ik ben inderdaad bang dat ik zoals Erwin al zei (Erwin H 18/12/2012 12:30:27) dat ik per dag van de datum range die ik wil controleren zal moeten gaan kijken of er nog kamers beschikbaar zijn op die dag. Of heeft er iemand nog een betere oplossing waarmee dit met één query zou kunnen?
 
Erwin H

Erwin H

18/12/2012 13:13:20
Quote Anchor link
@Henze: Jammer, maar zo simpel is het niet. Ja, er is elke dag een kamer vrij, maar het hoeft niet dezelfde kamer te zijn over de hele periode. Daarmee kan je die extra reservering misschien nog wel aanvaarden, maar je kan die dan niet aan 1 kamer toewijzen (en ik neem aan dat de meeste mensen niet van kamer willen veranderen in die periode).

Neem het volgende voorbeeld voor een hotel met 2 kamers:
R1)1 jan - 3 jan kamer 1
R2)4 jan - 6 jan kamer 1
R3)2 jan - 4 jan kamer 2
R4)5 jan - 7 jan kamer 2
Nu zie je dat als ik van 3 januari tot 5 januari wil boeken, ik de eerste nacht in kamer 1 zou kunnen zitten en de tweede nacht in kamer 2. Zolang er verder geen reserveringen zijn zou je kamers kunnen omgooien, maar zelfs dat zou onacceptabel kunnen zijn als mensen specifiek een kamer willen hebben.


Toevoeging op 18/12/2012 13:14:45:

Lars Anderson op 18/12/2012 13:10:13:
Ik ben inderdaad bang dat ik zoals Erwin al zei (Erwin H 18/12/2012 12:30:27) dat ik per dag van de datum range die ik wil controleren zal moeten gaan kijken of er nog kamers beschikbaar zijn op die dag. Of heeft er iemand nog een betere oplossing waarmee dit met één query zou kunnen?

Dit kan al met 1 query.
Gewijzigd op 18/12/2012 13:13:50 door Erwin H
 
No One

No One

18/12/2012 13:22:38
Quote Anchor link
@Erwin... gebeurt regelmatig...heb het ook regelmatig meegemaakt. en dan zou ik willen zeggen: had dan bij reservering een kamernummer opgegeven of gevraagd om uitzicht op zee...dan heeft de dienstdoende persoon een kamer toegewezen die uitzicht op zee heeft. overigens gebeurt dat geswap van kamers alleen voor mensen die later reserveren.

in jou hotel zijn de reserveringen dus al gekoppeld aan kamernummers. maar als jij die kamernummers niet weet, dan weet je nog wel dat je de eerste nacht maar 1 kamer vrij hebt welke dat is maakt niet uit. als iemand langer wil zul je dus wie het eerst maalt systeem moeten gebruiken: de persoon die eerder gereserveerd heeft krijgt een kamer aaneengesloten, de persoon die later is kan je aangeven dat hij dan moet verkassen van kamer dat probleem los je echt niet op door de kamernummers wel te weten...tenslotte weet je zelfs met kamernummers in jou voorbeeld al dat iemand moet verkassen ;)

Toevoeging op 18/12/2012 13:25:14:

Je zou trouwens ook gewoon de eerstvolgende vrije kamer invullen en die later wijzigen als je dat dan toch zo perse nodig vind...dan weet je altijd een kamer...iemand die niet specifiek een kamer reserveerd maakt het toch niet uit.
 
Lars Anderson

Lars Anderson

18/12/2012 13:29:03
Quote Anchor link
Erwin H op 18/12/2012 13:13:20:

Lars Anderson op 18/12/2012 13:10:13:
Ik ben inderdaad bang dat ik zoals Erwin al zei (Erwin H 18/12/2012 12:30:27) dat ik per dag van de datum range die ik wil controleren zal moeten gaan kijken of er nog kamers beschikbaar zijn op die dag. Of heeft er iemand nog een betere oplossing waarmee dit met één query zou kunnen?

Dit kan al met 1 query.



Hoe? Kun je daar wellicht een voorbeeld van geven?
 
No One

No One

18/12/2012 13:32:45
Quote Anchor link
Met deze query kun je alle datums selecteren. vandaar uit kun je een query omheen bouwen die elke datum checkt op het aantal kamers
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<? select a.Date, (query met a.Date er in) as kamers_vrij
from (
    select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as Date
    from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
) a
where a.Date between '2010-01-20' and '2010-01-24' ?>
 
Lars Anderson

Lars Anderson

18/12/2012 14:32:19
Quote Anchor link
Bah, ik kom er nog steeds niets uit. Wat ik ook probeer. Ik krijg geen resultaten.
Dit is wat ik doe:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
SELECT a.Date, (SELECT count(*)
FROM reservations
WHERE `reservation_end` > a.Date
AND `reservation_start` < a.Date
GROUP BY room_type_id
) as kamers_bezet
from (
    select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as Date
    from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
) a
where a.Date between '2012-12-20' and '2012-12-25'
?>



Wat ik hier nu uit zou willen krijgen is een lijstje dat er als volgt uit ziet:

a.Date: Kamers bezet:
2012-12-20 0
2012-12-21 1
2012-12-22 1
2012-12-23 1
2012-12-24 0

Wat doe ik fout?
 
No One

No One

18/12/2012 15:08:22
Quote Anchor link
De where clause zoekt naar reserveringen tussen 2012-12-20 en 2012-12-20...

denk dat je die where clause iets moet maken where a.Date between reservation_start and reservation_end.
Gewijzigd op 18/12/2012 15:09:20 door No One
 
Erwin H

Erwin H

18/12/2012 16:30:45
Quote Anchor link
Lars Anderson op 18/12/2012 13:29:03:
Hoe? Kun je daar wellicht een voorbeeld van geven?

Het 'put your money where your mouth is' principe. En ik kan je geen ongelijk geven, want waar ik eerst dacht 'dat doe je even zo', bleek het toch wat lastiger.

Maar, zonder overigens geprobeerd te hebben de query van Henze aan de praat te krijgen, heb ik wel iets wat in mijn kleine test omgevinkje werkte. Per stap uitleg:

1) als eerste heb je nodig een rij van data waarover je wil controleren hoeveel reserveringen er zijn. Ik ken iemand die een tabel bijhoudt met alle dagen van nu en in de toekomst erin.... dat ben ik echter niet van plan. Dus hier een 'on-the-fly' oplossing (met een addertje):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SET @num = -1;
SELECT DATE_ADD( '2013-01-01', interval @num := @num+1 day) AS date_sequence
FROM numbers
HAVING DATE_ADD('2013-01-01', interval @num day) <= '2013-01-14'

De data kan je zelf invullen, '2013-01-01' en '2013-01-14' waren mijn testwaardes.
Het addertje is in de FROM clause, die tabel 'numbers'. Deze query kan je niet draaien zonder echte tabel en ook niet zonder een tabel met genoeg rijen erin! Numbers is dus een bestaande tabel bij mij, die ook een aantal rijen heeft. Maakt niet uit wat erin staat, als er maar iets bestaat. In mijn geval heeft die tabel 1 kolom, met 100 rijen met alleen 0. Dit heb je nodig, want bovenstaande loopt alle rijen van de geselecteerde tabel af en creeert tijdens die query de data die je nodig hebt. Heb je dus te weinig rijen in de tabel staan, dan krijg je ook te weinig dagen!!

2) link bovenstaande aan de tabel met reserveringen
Hier komt ook een alternatieve methode om de hoek kijken. Bij de join die je maakt wil je eigenlijk de reserveringen dupliceren voor alle dagen van de reservering, zodat je makkelijk kunt tellen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
SELECT a.id, b.date_sequence
FROM booking a
INNER JOIN (
  SELECT DATE_ADD( '2013-01-01', interval @num := @num+1 day) AS date_sequence
  FROM numbers
  HAVING DATE_ADD('2013-01-01', interval @num day) <= '2013-01-14'
) b ON (
  a.aankomst <= b.date_sequence
  AND vertrek > b.date_sequence
)

Zoals je ziet zijn de voorwaarden voor de join niet de gebruikelijke gelijkheden, maar ongelijkheden. Zo worden de reserveringen gekoppeld aan elke dag in de reservering, niet alleen aan de aankomst en/of vertrekdag.

3) tellen
Het makkelijke deel :-)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
SET @num = -1;
SELECT count(a.id), b.date_sequence
FROM booking a
INNER JOIN (
  SELECT DATE_ADD( '2013-01-01', interval @num := @num+1 day) AS date_sequence
  FROM numbers
  HAVING DATE_ADD('2013-01-01', interval @num day) <= '2013-01-14'
) b ON (
  a.aankomst <= b.date_sequence
  AND vertrek > b.date_sequence
)
GROUP BY b.date_sequence;


Ik hoop dat het duidelijk is, dat het werkt en ook dat het niet al te langzaam is. Het werkte dus in de testomgeving, maar die is te klein om echte performance to kunnen checken.
Gewijzigd op 18/12/2012 16:32:06 door Erwin H
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

18/12/2012 16:37:20
Quote Anchor link
Henze, ik vraag me af of jij überhaupt een rijtje datums uit die query krijgt.
En dan zonder de queries eromheen.
Een andere optie is om simpelweg een tabelletje te maken met de datums voor de aankomende jaren en daarop te joinen bv:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
     d.adate,
    COUNT(r.id) AS rooms_reserved
FROM
    (SELECT adate FROM date_table
    WHERE adate BETWEEN '2012-12-19' AND '2012-12-24') d
LEFT JOIN
    (SELECT id, reservation_start rs, reservation_end re
    FROM reservations
    WHERE room_type = 'A' AND reservation_end >= CURRENT_DATE()) r
    ON r.rs <= d.adate AND r.re > d.adate
GROUP BY d.adate

Probleem blijft bestaan dat als er in die periode 2x een verschillende specifieke kamer is gereserveerd je dat niet kunt achterhalen.


Toevoeging op 18/12/2012 16:49:14:

@Erwin, ik ken die persoon toevallig ook!
Gewijzigd op 18/12/2012 16:40:39 door Ger van Steenderen
 
Erwin H

Erwin H

18/12/2012 16:54:05
Quote Anchor link
Ger van Steenderen op 18/12/2012 16:37:20:
@Erwin, ik ken die persoon toevallig ook!

:-)
Nu wil ik niet zeggen dat dat een slechte oplossing is, het is gewoon niet de mijne. Helaas heb ik het nu alsnog moeten doen met een extra (verder nutteloze) tabel, dus ik blijf nog wel even kijken naar een oplossing zonder verdere externe hulpmiddelen.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

18/12/2012 17:09:47
Quote Anchor link
Het punt is dat je anders telkens een tempory table moet gaan maken en daarin de datums te inserten .
Normaal gesproken ben ik ook geen voorstander van zo'n nutteloze tabel, maar of het één er met datums is of met nummers maakt ook niet zoveel uit. Overigens kan jou stukje subquery iets makkelijker:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT
    @startdate := @startdate + INTERVAL 1 DAY AS datum
FROM
    numbers,
    (SELECT @startdate := '2012-12-17') uvar
HAVING @startdate <= '2012-12-24'
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.