Gegevens uilezen en groeperen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Hugo

Hugo

05/02/2007 00:18:00
Quote Anchor link
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
 
PHP hulp

PHP hulp

20/11/2024 01:26:26
 
Jan Koehoorn

Jan Koehoorn

05/02/2007 00:26:00
Quote Anchor link
Hoi Hugo,

in wat voor veldtype heb je 'datum' en 'tijd' opgeslagen?
 
Hugo

Hugo

05/02/2007 00:30:00
Quote Anchor link
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
 
Jan Koehoorn

Jan Koehoorn

05/02/2007 00:33:00
Quote Anchor link
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.
 
Hugo

Hugo

05/02/2007 00:41:00
Quote Anchor link
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
 
Joren de Wit

Joren de Wit

05/02/2007 14:51:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
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 ;)
 
Hugo

Hugo

05/02/2007 15:56:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
}

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)
PHP script in nieuw venster Selecteer het PHP script
1
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 "&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
Gewijzigd op 01/01/1970 01:00:00 door Hugo
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.