Gegevens uilezen en groeperen
Ik heb een tabel waar de volgende gegevens in worden opgeslagen:
rooster_id, film_id, datum, tijd.
Wat ik ik nu wil is het volgende. Ik haal voor een bepaalde film dmv film_id de datum en tijd op. Dus een film kan op meerdere dagen draaien, en per dag op meerdere tijdstippen. Ik wil netjes per datum alle tijden tonen, op deze manier:
Maandag 05-02-07
12:45 13:45
Dinsdag 06-02-07
11:20 16:00
Hoe kan ik dit het beste doen? Ik dacht zoiets om eerst de gegevens van uit de database in een multidimensionale array te zetten. Maar dan kom ik niet verder.
Ik hoop dat ik genoeg informatie heb gegeven. Ik wist niet goed waar ik op moest zoeken in op het forum, vandaar dat ik een bericht plaats.
Groeten,
ShuGos
in wat voor veldtype heb je 'datum' en 'tijd' opgeslagen?
Jan Koehoorn schreef op 05.02.2007 00:26:
Hoi Hugo,
in wat voor veldtype heb je 'datum' en 'tijd' opgeslagen?
in wat voor veldtype heb je 'datum' en 'tijd' opgeslagen?
Datum: date
Tijd: time
SELECT datum, tijd
FROM tabelnaam
ORDER BY datum ASC, tijd ASC
Daarna zou je met je PHP script moeten gaan kijken welke tijden er allemaal op 1 dag vallen.
Jan Koehoorn schreef op 05.02.2007 00:33:
Je zou een query als deze moeten hebben:
SELECT datum, tijd
FROM tabelnaam
ORDER BY datum ASC, tijd ASC
Daarna zou je met je PHP script moeten gaan kijken welke tijden er allemaal op 1 dag vallen.
SELECT datum, tijd
FROM tabelnaam
ORDER BY datum ASC, tijd ASC
Daarna zou je met je PHP script moeten gaan kijken welke tijden er allemaal op 1 dag vallen.
Ja klopt. Ik heb alleen een join met de films tabel. Omdat er in de de tabel waar we het over hebben ook nog een film_id in staat, en ik de titel bij dit film_id wil hebben. Maar de uitvoer komt overeen.
Maarja hoe ga ik dat na. Daar zit ik dus vast. Hoe groepeer ik per datum zeg maar? Wat ik als voorbeeld aangaf in mijn begin post.
ShuGos
Vervolgens zou je die restultaat set uit kunnen lezen en een multidimensionale array aan kunnen maken. Als keys op het eerste level gebruik je dan de data, vervolgens krijg je op het tweede level weer een array met als keys de naam/het id van een film. En tenslotte op het derde level zou je dan de tijden waarop die film op die dag draait op kunnen nemen.
Je krijgt dan iets dat er zou uit zou kunnen zien:
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
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
Array
(
[05-02-2007] => Array
(
[film1] => Array
(
[0] => 14.00
[1] => 16.00
)
[film2] => Array
(
[0] => 14.00
[1] => 19.00
)
[film3] => Array
(
[0] => 19.00
[1] => 21.30
[2] => 22.00
)
)
[06-02-2007] => Array
(
[film3] => Array
(
[0] => 21.00
[1] => 22.00
)
)
)
(
[05-02-2007] => Array
(
[film1] => Array
(
[0] => 14.00
[1] => 16.00
)
[film2] => Array
(
[0] => 14.00
[1] => 19.00
)
[film3] => Array
(
[0] => 19.00
[1] => 21.30
[2] => 22.00
)
)
[06-02-2007] => Array
(
[film3] => Array
(
[0] => 21.00
[1] => 22.00
)
)
)
Er gaat nog wel behoorlijk wat php code aan vooraf voordat je dit resultaat krijgt, maar dat mag je eerst zelf proberen ;)
Code (php)
1
2
3
4
5
2
3
4
5
$rooster = array(); // Database uitvoer in array opslaan
while ($rij = mysql_fetch_row($uitvoer)) {
$tijd = substr($rij[3], 0, -3);
$rooster[] = array($rij[2], $tijd);
}
while ($rij = mysql_fetch_row($uitvoer)) {
$tijd = substr($rij[3], 0, -3);
$rooster[] = array($rij[2], $tijd);
}
N.B. $rij[2] is de datum in UNIX_TIMESTAP formaat
Nu alles in een array staat, de array uitlezen met het volgend stukje code:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
for($i=0;$i<count($rooster);$i++) {
if ($rooster[$i-1][0] != $rooster[$i][0]) {
echo "<p>".$rooster[$i][0]."</p>";
echo " ".$rooster[$i][1];
} else {
echo " ".$rooster[$i][1];
}
}
if ($rooster[$i-1][0] != $rooster[$i][0]) {
echo "<p>".$rooster[$i][0]."</p>";
echo " ".$rooster[$i][1];
} else {
echo " ".$rooster[$i][1];
}
}
Met een for-loop ga ik door de array heen. De if-else controleert of de twee data gelijk zijn aan elkaar en beslist dan om de datum af te drukken met de tijd of alleen de tijd.
Graag jullie reactie. Is een andere manier misschien sneller en/of beter?
Bedankt voor jullie voor afgaande reacties.
ShuGos
Gewijzigd op 01/01/1970 01:00:00 door Hugo