Het is bedoeld om reserveringen via de website in kaart te brengen. Elke keer dat er een reservering geplaatst wordt komt er +1 bij de desbetreffende datum (rij) en tijdstip (kolom).
Nu zou ik de datum + tijdstip willen terugkrijgen van alle tijdstippen die HOGER dan 5 zijn. Dus wanneer op 25 maart voor 19:30, 6 reserveringen zijn geplaatst, wil ik graag dat weten.
Nee, het is niet echt een logische structuur. Je moet juist in de lengte werken, en niet in de breedtte.
Je kan prima per aangemaakte rij een tijd meegeven, zodat je makkelijker berekeningen kan maken.
Bedankt voor je reactie. Heb jij misschien een idee hoe ik dit beter aan kan pakken? Het `laatste_bestelnummer` moet wel achter de datum staan, die loopt op per bestelling.
Is het misschien beter om nog een tabel aan te maken, voor alleen de tijdstippen?
Inderdaad zoals Ariën aangeeft gewoon één rij (of record) per reservering pakken.
Wat ik nog niet helemaal zeker kan zeggen is die kolom laatste_bestelnummer... kun je daar iets meer over vertellen. Want die reserveringen om het kwartier per dag vallen die dan allemaal onder één bestelnummer?
Indien je een bestelnummer zou kunnen hanteren per reservering dan zou je de kolommen
-id
-(laatste_)bestelnr
-datum (DATETIME)
krijgen.
Vervolgens kun je met een query gewoon alle reserveringen tussen twee bepaalde tijden kunnen ophalen. bijv
SELECT * FROM tabelnaam WHERE datum BETWEEN '2020-03-21 19:00:00' AND '2020-03-21 23:59:59' ORDER BY datum ASC;
[size=xsmall]Toevoeging op 21/03/2020 13:38:24:[/size]
Maar misschien dient die laatste_bestelnummer wel heel ergens anders voor en moet je misschien wel een extra tabel aanmaken.
[size=xsmall]Toevoeging op 21/03/2020 13:48:48:[/size]
>> Dus wanneer op 25 maart voor 19:30, 6 reserveringen zijn geplaatst, wil ik graag dat weten.
Dat kun je ook oplossen in PHP of Mysql. Maar queries zijn relatief "dure" operaties dus ik zou er al gauw voor kiezen om in één query alle reserveringen op te halen van een bepaalde dag en de rest binnen PHP op te lossen.
Elke bestellingen krijgt een bestelnummer toegewezen. Dit bestelnummer is per dag afhankelijk. Dit getal begint per dag op 500.
- Dus de eerste bestelling voor 25 maart krijgt bestelnummer 501, 2e bestelling krijgt 502 etc.
- De eerste bestelling van 28 maart krijgt ook bestelnummer 501, 2e bestelling 502 etc.
Dit getal loopt deze per datum vanaf 500 omhoog.
Ik heb dus een datumpicker met ook alle tijdstippen (van 16.00 - 20:00). Als er voor 18:00 bijvoorbeeld al meer dan 5 bestellingen zijn gedaan, wil ik graag het tijdstip 18:00 disablen in de datumpicker.
Ik wil dus de datum + tijdstip terugkrijgen waarbij het tijdstip vaker dan 5 keer is 'besteld'.
Ik ga er van uit dat een reserveringstijd altijd afgerond is op een heel kwartier...
<?php
// een functie die het aantal overeenkomende datetimes telt
function getAantalReserveringen(DateTime $datetime, array $data) :int
{
$aantal = 0;
foreach($data as $row) {
$reservationTime = new DateTime($row['datum']);
if($datetime == $reservationTime)
$aantal++;
}
return $aantal;
}
// haal de reserveringen van een bepaalde datum uit de database
$query = "SELECT * FROM tabelnaam WHERE datum BETWEEN '2020-03-21 00:00:00' AND '2020-03-21 23:59:59';";
@Ger
Dat staat er niet.
Er staat dat query's duur zijn. En dat je dus beter alle benodigde tellingen in 1 keer op kunt vragen ipv per tijdslot een (tel)query te draaien.
BETWEEN kan gebruik maken van een evt. index op de datum kolom. Op het moment dat je met een function (DATE()) gaat werken gaat die index verloren (= trager).