Pytanie czy osobne pole na date i godzine jest Ci do czegoś potrzebne. Moim zdaniem nie, bo w mysql bardzo łatwo można wyciągnąć każdy komponent z datetime używająć funkcjij minute
, hour
itd.
Dodatkowo PDO ma taki fajny bajer jak PDO::FETCH_GROUP
, który Ci poszatkuje twoją tablicę co pół godziny. Wystarczy, że do swojego zapytania dołożysz taką kolumnę:
SELECT
-- TA KOLUMNA KONIECZNIE MUSI BYĆ PIERWSZA, BO TEGO WYMAGA PDO::FETCH_GROUP
CONCAT(
hour(start_date),
IF(minute(start_date) BETWEEN 0 AND 30, ':00', ':30')
) AS timespan
-- reszta pól
FROM events;
Teraz magia PDO:
$stmt = $connection->prepare("...");
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP);
// To jest twój rezultat (zauważ, że nie musisz robić dodatkowego foreacha, zeby sobie to samemu pociąć):
$result = [
'9:00' => [
['id' => 1, 'start_date' => '9:00'],
['id' => 2, 'start_date' => '9:15'],
['id' => 3, 'start_date' => '9:25'],
],
'9:30' => [
['id' => 4, 'start_date' => '9:35'],
['id' => 5, 'start_date' => '9:45'],
['id' => 6, 'start_date' => '9:50'],
],
'10:00' => [
]
];
$next = array_keys($result);
foreach ($result as $spanStart => $events) {
$spanEnd = next($next);
echo "Wydarzenia w przedziale " . $spanStart . " - " . $spanEnd . "<br>";
foreach ($events as $event) {
echo $event["id"] . " " . $event["start_date"] . "<br>";
}
}