Sorteren op maand...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$tempMonth = 0;
foreach($activiteit as $row) {
$datum = $row['datum'];
$month = getdate(strtotime($datum));
if($month != $tempMonth) {
echo "
<div class=\"agenda\" style=\"background-color: #999966; width: 90px; color: #fafafa; text-align: center;\">
<strong>" . $month['month'] . "</strong>
</div>
";
$tempMonth = $month;
}
// echo hier de output
}
?>
$tempMonth = 0;
foreach($activiteit as $row) {
$datum = $row['datum'];
$month = getdate(strtotime($datum));
if($month != $tempMonth) {
echo "
<div class=\"agenda\" style=\"background-color: #999966; width: 90px; color: #fafafa; text-align: center;\">
<strong>" . $month['month'] . "</strong>
</div>
";
$tempMonth = $month;
}
// echo hier de output
}
?>
de query functie is overigens 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
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
<?php
function getActiviteiten() {
$query = "
SELECT
ap.agendapunt_id, ap.activiteit, ap.datum, ap.tijdBegin, ap.tijdEind, ap.omschrijving, ap.locatie, ap.agenda_id, a.agenda, a.kleur, l.lid_id, l.voornaam, l.achternaam, UNIX_TIMESTAMP(ap.datum) AS unixDatum
FROM
agendapunt ap
INNER JOIN
agenda a
ON
a.agenda_id = ap.agenda_id
INNER JOIN
leden l
ON
l.lid_id = ap.lid_id
WHERE
MONTH(ap.datum) >= MONTH(NOW())
ORDER BY
ap.datum
";
$stmt = $this->db->prepare($query);
$stmt->execute();
$array = $stmt->fetchAll();
return $array;
}
?>
function getActiviteiten() {
$query = "
SELECT
ap.agendapunt_id, ap.activiteit, ap.datum, ap.tijdBegin, ap.tijdEind, ap.omschrijving, ap.locatie, ap.agenda_id, a.agenda, a.kleur, l.lid_id, l.voornaam, l.achternaam, UNIX_TIMESTAMP(ap.datum) AS unixDatum
FROM
agendapunt ap
INNER JOIN
agenda a
ON
a.agenda_id = ap.agenda_id
INNER JOIN
leden l
ON
l.lid_id = ap.lid_id
WHERE
MONTH(ap.datum) >= MONTH(NOW())
ORDER BY
ap.datum
";
$stmt = $this->db->prepare($query);
$stmt->execute();
$array = $stmt->fetchAll();
return $array;
}
?>
http://phphulp.nl/php/tutorials/3/519/1283/
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
$query = "
SELECT
ap.agendapunt_id, ap.activiteit, ap.datum, ap.tijdBegin, ap.tijdEind, ap.omschrijving, ap.locatie, ap.agenda_id, a.agenda, a.kleur, l.lid_id, l.voornaam, l.achternaam, UNIX_TIMESTAMP(ap.datum) AS unixDatum, MONTH(ap.datum) as maand
FROM
agendapunt ap
INNER JOIN
agenda a
ON
a.agenda_id = ap.agenda_id
INNER JOIN
leden l
ON
l.lid_id = ap.lid_id
HAVING
maand >= MONTH(NOW())
ORDER BY
maand
";
?>
$query = "
SELECT
ap.agendapunt_id, ap.activiteit, ap.datum, ap.tijdBegin, ap.tijdEind, ap.omschrijving, ap.locatie, ap.agenda_id, a.agenda, a.kleur, l.lid_id, l.voornaam, l.achternaam, UNIX_TIMESTAMP(ap.datum) AS unixDatum, MONTH(ap.datum) as maand
FROM
agendapunt ap
INNER JOIN
agenda a
ON
a.agenda_id = ap.agenda_id
INNER JOIN
leden l
ON
l.lid_id = ap.lid_id
HAVING
maand >= MONTH(NOW())
ORDER BY
maand
";
?>
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
Alleen sorteren op maand? Zou je niet sorteren op de combi jaar-maand dan?
Ze vragen, wij draaien...
September
Activiteit 1
Wanneer: 20-09-2008
November
Activiteit 2
Wanneer: 19-11-2008
November
Activiteit 3
Wanneer: 20-11-2008
Kortom op dit moment wordt de volledige datum vergeleken, en als die verschilt dan wordt de maand gepost, nu krijg ik dubbele maanden. Want als ik de datum van activiteit 3 gelijk maak aan de tweede komt die activiteit wel onder november.
Sorteren betekent: alles weergeven in een bepaalde volgorde. Voor zover ik zie, zijn je drie activiteiten gesorteerd volgens maand, net zoals je vroeg.
Bedoel je misschien dat je maar 1 activiteit per maand wil? Dat is niet sorteren, dat is groeperen.
Of wil je nog iets anders?
Emmanuel Delay schreef op 05.08.2008 17:14:
Ze vragen, wij draaien...
Ik neem aan dat jij als "webdeveloper" wel inziet dat dit niks met de klant te maken heeft, jij moet een systeembouwen die gewoon niet in 2009 de soep in loopt toch?
Sorteren per maand betekent: eerst de berichten van januari, dan van februari, ...
Enkel de berichten tonen van deze maand is iets anders. 1 bericht per maand tonen is nog iets anders.
Als duidelijk wordt wat de vraag precies is, zal het antwoord vlug volgen. Ik weet dat het niet altijd gemakkelijk is om precies duidelijk te maken wat je wil.
Excuseer voor de onduidelijkheid.
b.v.d.
Dat is geen probleem van sorteren, maar van de weergave. Hier zou ik, in php, in de for/while lus een rij toevoegen telkens de maand veranderd is tov. de vorige datum.
-Moet het jaar ook van belang zijn? (of wil je de activiteiten van november 2007 samen met de activiteiten van november 2008 zien?)
indien ja
{
-Moet het beginnen met januari of wil je bv. beginnen met deze maand (augustus 2008)?
-Wil je een beperkt aantal maanden tonen (bv. van januari 2008 tot december 2008 of van augustus 2008 tot juli 2009)?
}
Laat ik er even een voorbeeld bij pakken:
http://www.last.fm/music/dEUS/+events
Onder upcoming events zie je de maandnaam met de evenementen en dan de volgende maand. Als een maand leeg is hoeft die ook niet worden getoond.
En het jaar is nu niet van belang enkel de maand.
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
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
<?
$sql = '
SELECT
id, datum, activiteit, MONTH(datum) as maand
FROM
hot_kalender
WHERE
datum >= "'. date("Y-m", time() ) .'-1' . '"
AND
datum < "'. date("Y-m", time() ) .'-1' . '" + INTERVAL 1 YEAR
ORDER BY datum
';
// ... $sql uitvoeren
$divLinks = '';
$divRechts = '';
$i = 0;
$maanden = array('', 'januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december');
$huidige_maand = 0;
$kalender_string = '';
while ( ($row = mysql_fetch_array($result))!=null)
{
if ($row['maand'] != $huidige_maand)
{
$kalender_string = $kalender_string . '<li class="nieuwe_maand">'. $maanden[ $row['maand'] ] .'</li>';
$huidige_maand = $row['maand'];
}
$kalender_string = $kalender_string . '<li class="activiteit">'. $row['datum'] .' '. $row['activiteit'] .'</li>'; // maar dan de velden die jij nodig hebt
}
echo $kalender_string ;
?>
$sql = '
SELECT
id, datum, activiteit, MONTH(datum) as maand
FROM
hot_kalender
WHERE
datum >= "'. date("Y-m", time() ) .'-1' . '"
AND
datum < "'. date("Y-m", time() ) .'-1' . '" + INTERVAL 1 YEAR
ORDER BY datum
';
// ... $sql uitvoeren
$divLinks = '';
$divRechts = '';
$i = 0;
$maanden = array('', 'januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december');
$huidige_maand = 0;
$kalender_string = '';
while ( ($row = mysql_fetch_array($result))!=null)
{
if ($row['maand'] != $huidige_maand)
{
$kalender_string = $kalender_string . '<li class="nieuwe_maand">'. $maanden[ $row['maand'] ] .'</li>';
$huidige_maand = $row['maand'];
}
$kalender_string = $kalender_string . '<li class="activiteit">'. $row['datum'] .' '. $row['activiteit'] .'</li>'; // maar dan de velden die jij nodig hebt
}
echo $kalender_string ;
?>
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
Code (php)
1
2
3
2
3
<?php
$maanden = array('', 'januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december');
?>
$maanden = array('', 'januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december');
?>
Ja, dat snap ik wel, maar waarom heb je in het eerste arrayelement een lege string?
Code (php)
1
2
3
2
3
<?php
$maanden = array(1 => 'januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december');
?>
$maanden = array(1 => 'januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december');
?>
Dan toch liever expliciet iets invullen.
Maar kom, genoeg hier over. Dit was niet de essentie van het probleem.
Is goed. Je weet nu in ieder geval dat je in PHP zelf een offset kunt definieren.