Avatar billede nemlig Professor
09. marts 2008 - 12:53 Der er 11 kommentarer og
1 løsning

Hent datoer fra MySQL grupperet på halve år

Jeg har en tabel med nogle arrangementer. Hvert arrangement (post) har en "startdato" i formatet DATE.
Jeg ønsker at lave et udtræk, hvor alle datoerne læses, og MySQL lister de halvårs-perioder, hvor der er datoer:
Der kan fx. være 50 datoer, men de dækker kun over 3 halvårs perioder.

Fx:
row1 = 1 2008 (1. halvår 2008)
row2 = 2 2008 (2. halvår 2008)
row3 = 3 2008 (1. halvår 2009)

Så kan jeg nemlig efterfølgende hente de forskellige datoer på arrangementerne og liste dem i de rigtige perioder.
Jeg skriver i PHP.
Avatar billede showsource Seniormester
09. marts 2008 - 13:25 #1
Noget i stil med:

$aar = "2008";
$half = "-07-01";
$datoer = "SELECT `dato` FROM `tabel` WHERE `dato` < '".$aar.$half."' AND YEAR(`dato`) = '".$aar."'";
Avatar billede showsource Seniormester
09. marts 2008 - 13:27 #2
Og så kan du jo bruge en UNION til også at hente dem som er større
Avatar billede nemlig Professor
09. marts 2008 - 13:48 #3
Koden skal helst være vedligeholdelsesfri, hvorfor den også automatisk skal kunne hente nye og kommende arrangementer (fx. i 2009, 2010...osv).

Jeg havde forestillet mig noget i retning af:
1. Læs alle datoerne i tabellen og returner kun årstallene (Hvis datoerne ligger i 2008 - 2010, så returneres "2008, 2009, 2010" selvom der måske er 50 datoer).
2. Så kører jeg 2 x SELECT og While på de årstal, som returneres fra punkt 1. og lister de poster med datoer i 1 halvår og 2 halvår.

Nr. 2 kan jeg finde ud af og minder om din SELECT ovenfor.
Men hvordan henter jeg alene de 3 årstal, som eksemplet i punkt 1.
Avatar billede showsource Seniormester
09. marts 2008 - 13:59 #4
Du kan finde hvilke år som er gemt med:
SELECT DISTINCT(YEAR(`dato`)) FROM `tabel` WHERE YEAR(`dato`) >= YEAR(CURDATE())
Avatar billede nemlig Professor
09. marts 2008 - 14:18 #5
Det lyder som det, jeg leder efter, men...
Hvordan lister jeg disse årstal:
Jeg gør sådan her:

$sql = "SELECT DISTINCT(YEAR(`afgang`)) FROM tur WHERE YEAR(`afgang`) >= YEAR(CURDATE())";
$res = database($sql);
   
while($row = mysql_fetch_array($res))
{
echo $row['afgang'];
}

Men der vises ingen årstal. Det er nok "$row['afgang'] det er galt med, da jeg ikke aner, hvad det skal hedde?
Avatar billede showsource Seniormester
09. marts 2008 - 14:29 #6
$sql = "SELECT DISTINCT(YEAR(`afgang`)) as `aarstal` FROM tur WHERE YEAR(`afgang`) >= YEAR(CURDATE())";
$res = database($sql) or die (mysql_error());
    if(mysql_num_rows($res) > 0)
    {
        while($row = mysql_fetch_array($res))
        {
        echo $row['aarstal'];
        }
    }
    else
    {
    echo"Ingen rows!";
    }

afgang skal jo så være i formatet yy-mm-dd
Avatar billede nemlig Professor
09. marts 2008 - 14:34 #7
Now we are talking....... :-)
Tusind tak. Så finder jeg ud af resten.
Sendt venligst et svar.
Avatar billede showsource Seniormester
09. marts 2008 - 14:46 #8
Ingen point, ellers tak.
Og overvej at bruge UNION til at hente for et år ad gangen, evt. alle år
Avatar billede nemlig Professor
09. marts 2008 - 14:54 #9
OK - mange tak.
Har du lige et bud på, hvad jeg gør forkert i denne sætning.
$sql2 = "SELECT * FROM tur WHERE afgang BETWEEN '".$row['aarstal']."-01-01','".$row['aarstal']."-06-30'";

Det er den sætning, hvor jeg henter fra 1. halvår.
Avatar billede nemlig Professor
09. marts 2008 - 14:56 #10
Jeg fant du af det. Jeg skulle anvende "AND" i mellem de 2 datoer og ikke "komma".
Avatar billede showsource Seniormester
09. marts 2008 - 15:07 #11
Husk at lukke spm. her.
Avatar billede nemlig Professor
09. marts 2008 - 15:22 #12
Takker endnu engang. Jeg lukker.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester