Sorteren op maand...

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marco

Marco

05/08/2008 14:39:00
Quote Anchor link
Ik wil activiteiten sorteren op maand. Op dit moment vergelijkt ie de volledige datum en die verschilt 9 van de 10 keer per activiteit. Wat ik dus wil is de maand van de opgegeven datum te vergelijken (iets met explode maybe?... maar hoe). Dit is wat ik heb:

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
<?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
                        
                    }
                    ?>


de query functie is overigens als volgt:

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
<?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;
        
    }


?>
 
PHP hulp

PHP hulp

21/11/2024 20:48:03
 
Emmanuel Delay

Emmanuel Delay

05/08/2008 17:11:00
Quote Anchor link
Lees dit eens:
http://phphulp.nl/php/tutorials/3/519/1283/
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
<?
$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
 
Jan Koehoorn

Jan Koehoorn

05/08/2008 17:12:00
Quote Anchor link
Alleen sorteren op maand? Zou je niet sorteren op de combi jaar-maand dan?
 
Emmanuel Delay

Emmanuel Delay

05/08/2008 17:14:00
Quote Anchor link
Ze vragen, wij draaien...
 
Marco

Marco

06/08/2008 09:18:00
Quote Anchor link
Met HAVING kom ik er ook niet. Ik krijg namelijk een output als volgt met dubbele maandnamen:

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.
 
Emmanuel Delay

Emmanuel Delay

06/08/2008 19:39:00
Quote Anchor link
Nu volg ik je toch niet meer hoor.

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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
GROUP BY maand
HAVING
maand >= MONTH(NOW())


Of wil je nog iets anders?
 
W W

W W

06/08/2008 22:40:00
Quote Anchor link
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?
 
Emmanuel Delay

Emmanuel Delay

06/08/2008 23:31:00
Quote Anchor link
Zoals ik al zei, ik denk dat ik de vraag niet begrijp. Waarschijnlijk wil Marco iets wat niet goed overeen komt met de vraag die hij stelt.

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.
 
Marco

Marco

07/08/2008 10:21:00
Quote Anchor link
Het is inderdaad sorteren per maand: eerst de berichten van januari etc.
Excuseer voor de onduidelijkheid.

b.v.d.
 
Emmanuel Delay

Emmanuel Delay

07/08/2008 12:30:00
Quote Anchor link
Ah, je wil in de weergave op je site een rij met de maandnaam; onder die rij wil je rijen met alle activiteiten die in die maand plaats vinden. Is dat het probleem?

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)?
}
 
Marco

Marco

07/08/2008 14:13:00
Quote Anchor link
Het begint bij de huidige maand (augustus dus nu), de afgelopen maanden komen in een archief.

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.
 
Emmanuel Delay

Emmanuel Delay

07/08/2008 21:17:00
Quote Anchor link
Dan heb je dus zo-iets nodig. Vul zelf maar de juiste velden in.

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
<?
$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
 
Jan Koehoorn

Jan Koehoorn

07/08/2008 21:20:00
Quote Anchor link
@ Emmanuel: waarom heb je dit?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $maanden
= array('', 'januari', 'februari',  'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december');
?>
 
Emmanuel Delay

Emmanuel Delay

07/08/2008 21:22:00
Quote Anchor link
Weergeven van de maandnaam
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$maanden
[ $row['maand'] ]
?>
 
Jan Koehoorn

Jan Koehoorn

07/08/2008 21:23:00
Quote Anchor link
Ja, dat snap ik wel, maar waarom heb je in het eerste arrayelement een lege string?
 
Emmanuel Delay

Emmanuel Delay

07/08/2008 21:34:00
Quote Anchor link
Jaja, het kan ook met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$maanden
[ $row['maand'] - 1 ]
?>


Zo veel maakt dat niet uit in dit geval.
 
Jan Koehoorn

Jan Koehoorn

07/08/2008 21:37:00
Quote Anchor link
Waarom niet gewoon:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $maanden
= array(1 => 'januari', 'februari',  'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december');
?>
 
Emmanuel Delay

Emmanuel Delay

07/08/2008 21:44:00
Quote Anchor link
Waarschijnlijk mijn C kant. Een array zonder index 0 ...
Dan toch liever expliciet iets invullen.

Maar kom, genoeg hier over. Dit was niet de essentie van het probleem.
 
Jan Koehoorn

Jan Koehoorn

07/08/2008 22:22:00
Quote Anchor link
Is goed. Je weet nu in ieder geval dat je in PHP zelf een offset kunt definieren.
 



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.