Hoi,
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
Hoi Hugo,

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?


Datum: date
Tijd: time
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.
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.


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
Als je de query van Jan gebruikt krijg je dus een resultaat set waarin alle films die draaien opgenomen zijn (dit kan dus ook meerdere keren dezelfde film zijn), gesorteerd op datum en tijd.

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:

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
                )

        )

)


Er gaat nog wel behoorlijk wat php code aan vooraf voordat je dit resultaat krijgt, maar dat mag je eerst zelf proberen ;)
Ik heb gisteren nog wat geprobeerd en ben tot de volgende oplossing gekomen. Ik haal voor één film de gegevens op (datum en tijd) dmv een WHERE. Vervolgens zet ik de gegevens in een multidimensionale array:

$rooster = array(); // Database uitvoer in array opslaan
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:

for($i=0;$i<count($rooster);$i++) {
	if ($rooster[$i-1][0] != $rooster[$i][0]) {
		echo "<p>".$rooster[$i][0]."</p>";
		echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".$rooster[$i][1];
	} else {
		echo "&nbsp;&nbsp;".$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

Reageren