tabel vullen op datum en tijd
Ergens waar ik niet helemaal uitkom is het volgende.
Ik heb een lijst in de database als volgt
id - name - datetime
Nu wil ik vervolgens deze items allemaal selecteren en laten zien als volgt
Ik heb een tabel in mijn pagina met datum in het linker kolom en vervolgens tijden
| datum | 9 tot 10 | 10 tot 11 | etc etc..
Vervolgens wil ik de namen die ik uit de database wil halen sorteren en goed zetten aan de hand van datum/tijd.. maar hoe doe ik dit handig? ik kom er even zelf niet meer uit dus als iemand even mee kan/wil denken :)
in je SQL query ORDER BY datetime DESC
als je de nieuwste als eerste wilt gebruiken we DESC, en als je de oudste wilt, ASC
vul je voorbeeldje eens verder aan? je laat nu alleen de headers zien maar laat eens een voorbeeld-rij zien?
@Frank
Maar mochten er dus meerdere namen op dezelfde tijdstip komen te vallen bijvoorbeeld tussen 9 en 10 dan krijg je dus John en eronder weer de volgende naam. maar ik ben al blij als hij het zoals in het voorbeeldje al doet :)
Gewijzigd op 11/10/2013 21:57:16 door Reshad F
En in php kan je de presentatie verzorgen. Ik zou er dan gewoon een matrix van maken. Dus door al je opgehaalde records lopen en in feite alleen dit doen:
Code (php)
Vervolgens kan je die matrix omzetten naar een mooie tabel.
Je kan de hele matrix vast ook wel in SQL bouwen, maar persoonlijk zie ik daar het nut niet van in, helemaal niet als je data en presentatie toch al gescheiden hebt, dan wil je helemaal niet dat je datalaag bepaalt hoe de data vorm gegeven wordt.
Imo heeft een array opbouwen niets met presentatie te maken maar met data, in een MVC zou ik dat in het model doen.
En als ik een beetje ga muggenziften ben je ook niet helemaal consequent, DATE(datetime) en TIME(datetime) is dan ook presentatie.
Het DATE en TIME is inderdaad al inconsequent, op zich niet nodig.
En de code als volgt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
$res = $mysqli->query(
"SELECT name, date(datum) as datum, hour(datum) as tijd
FROM Lijst
ORDER BY datum
");
if(!$res) {
echo "Failed to run query: (" . $mysqli->errno . ") " . $mysqli->error;
}
else {
$matrix = array();
while ($row = $res->fetch_assoc()) {
$matrix[$row['datum']]['tijd'][] = $row['name'];
$var = '<table class="striped">';
$var .= '<tr class="header" id="ax">';
$var .= '<td id="a_datum">Datum</td>';
for($i=9; $i<24; $i++) {
$var .= '<td>' . $i . ':00</td>';
}
$var .= '</tr>';
foreach ($matrix as $key => $value) {
# code...
$var .= '<tr>';
$var .= '<td>';
$var .= $key;
$var .= '</td>';
$var .= '</tr>';
}
$var .= '</table>';
}
echo $var;
}
?>
$res = $mysqli->query(
"SELECT name, date(datum) as datum, hour(datum) as tijd
FROM Lijst
ORDER BY datum
");
if(!$res) {
echo "Failed to run query: (" . $mysqli->errno . ") " . $mysqli->error;
}
else {
$matrix = array();
while ($row = $res->fetch_assoc()) {
$matrix[$row['datum']]['tijd'][] = $row['name'];
$var = '<table class="striped">';
$var .= '<tr class="header" id="ax">';
$var .= '<td id="a_datum">Datum</td>';
for($i=9; $i<24; $i++) {
$var .= '<td>' . $i . ':00</td>';
}
$var .= '</tr>';
foreach ($matrix as $key => $value) {
# code...
$var .= '<tr>';
$var .= '<td>';
$var .= $key;
$var .= '</td>';
$var .= '</tr>';
}
$var .= '</table>';
}
echo $var;
}
?>
ps. de bovenste row maak ik gewoon zelf met die for loop dat zijn niet de tijden uit de DB
Gewijzigd op 12/10/2013 22:23:57 door Reshad F
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
// eerst een array voor de tijden zodat elke datum alle tijden krijgt
$times = array();
for ($i=9; $i<24; $i++) {
$times[$i] = array();
}
$res = $mysqli->query(
"SELECT name, date(datum) as datum, hour(datum) as tijd
FROM Lijst
ORDER BY datum, tijd
");
$date = '';
if(!$res) {
echo "Failed to run query: (" . $mysqli->errno . ") " . $mysqli->error;
}
else {
$matrix = array();
// matrix vullen
while ($row = $res->fetch_assoc()) {
if ($row['datum'] != $date) {
$date = $row['datum'];
$matrix[$date] = $times;
}
$matrix[$date][$row['tijd']][] = $row['name'];
}
// de tabel beginnen
$var = '<table class="striped">';
$var .= '<tr class="header" id="ax">';
$var .= '<td id="a_datum">Datum</td>';
for($i=9; $i<24; $i++) {
$var .= '<td>' . $i . ':00</td>';
}
$var .= '</tr>';
// de matrix uitlezen
foreach ($matrix as $datekey => $timearray) {
$var .= '<tr><td>' . $datekey . '</td>';
foreach ($timearray as $names) {
$var .= '<td>';
if (count($names) > 0) {
$var .= implode('<br>', $names);
}
else {
$var .= ' ';
}
$var .= '</td>';
}
$var .= '</tr>' . PHP_EOL;
}
$var .= '</table>';
echo $var;
}
?>
// eerst een array voor de tijden zodat elke datum alle tijden krijgt
$times = array();
for ($i=9; $i<24; $i++) {
$times[$i] = array();
}
$res = $mysqli->query(
"SELECT name, date(datum) as datum, hour(datum) as tijd
FROM Lijst
ORDER BY datum, tijd
");
$date = '';
if(!$res) {
echo "Failed to run query: (" . $mysqli->errno . ") " . $mysqli->error;
}
else {
$matrix = array();
// matrix vullen
while ($row = $res->fetch_assoc()) {
if ($row['datum'] != $date) {
$date = $row['datum'];
$matrix[$date] = $times;
}
$matrix[$date][$row['tijd']][] = $row['name'];
}
// de tabel beginnen
$var = '<table class="striped">';
$var .= '<tr class="header" id="ax">';
$var .= '<td id="a_datum">Datum</td>';
for($i=9; $i<24; $i++) {
$var .= '<td>' . $i . ':00</td>';
}
$var .= '</tr>';
// de matrix uitlezen
foreach ($matrix as $datekey => $timearray) {
$var .= '<tr><td>' . $datekey . '</td>';
foreach ($timearray as $names) {
$var .= '<td>';
if (count($names) > 0) {
$var .= implode('<br>', $names);
}
else {
$var .= ' ';
}
$var .= '</td>';
}
$var .= '</tr>' . PHP_EOL;
}
$var .= '</table>';
echo $var;
}
?>
Precies als ik nodig had!
thanks :)
Toevoeging op 13/10/2013 11:23:35:
Edit:
Ik heb nu een tweede tijd toegevoegd zodat ik kan aangeven uur VAN en uur TOT dit lukt al. alleen hoe krijg ik nu alle uren daartussen ook gevuld?
Ik heb nu een tweede tijd toegevoegd zodat ik kan aangeven uur VAN en uur TOT dit lukt al. alleen hoe krijg ik nu alle uren daartussen ook gevuld?
Gewijzigd op 13/10/2013 10:51:21 door Reshad F
Code (php)
1
2
3
4
5
2
3
4
5
<?php
for ($h = (int)$row['van']; $h < (int)$row['tot']; $h++) {
$matrix[$date][$row[$h]][] = $row['name'];
}
?>
for ($h = (int)$row['van']; $h < (int)$row['tot']; $h++) {
$matrix[$date][$row[$h]][] = $row['name'];
}
?>
Of bedoel je dit niet?
Gewijzigd op 13/10/2013 11:55:07 door Ger van Steenderen
Ik heb er dit van gemaakt om te kijken of $h de juiste integers heeft en ik krijg netjes 14 en 15 terug.
Code (php)
dit is zoals ze worden weergegeven nu
Gewijzigd op 13/10/2013 12:42:43 door Reshad F
Toevoeging op 13/10/2013 12:49:10:
Laat maar, de undefined offset komt van $row[$h], het moet dus zijn:
$matrix[$date][$h][] = $row['name'];
@Ger dat was hem! bedankt :)