Avatar billede Slettet bruger
05. december 2004 - 23:58 Der er 12 kommentarer og
1 løsning

Mysql script

Hej

Jeg har en tabel i min database, der indeholder disse felter:
"id, md, year, data"

Nu vil jeg så gerne hente dataværdieren fra den månede og år man er i og 6 måneder frem.

Her skal scriptet så indlæse datafeltet i en array. (data feltet indeholder kun tal)

Nu komme det svære: Det kan godt være, at ikke alle posteren er der. f.eks. kan det være at posten til månenden 9 og år 2005 ikke finde og så skal der bare indlæses et 0 i arrayen.

Håber nogen lige vil kigge på det.
Avatar billede hmortensen Nybegynder
06. december 2004 - 00:06 #1
Hvis du vælger et datetime felt til måned/år, kan de indbyggede dato funktioner bruges, og de tar højde for vores kringlede kalender :)

Du kan altid få formateret dib udskrift præcis som du vil, når du bruger et dato felt.
Avatar billede jakoba Nybegynder
06. december 2004 - 00:11 #2
WHERE  year*12 + md BETWEEN YEAR(NOW())*12 + MONTH(NOW())
                        AND YEAR(NOW())*12 + MONTH(NOW())+6
Avatar billede jakoba Nybegynder
06. december 2004 - 00:14 #3
men helt enig med hmortensen. Det er bedre at benytte MySQL's indbyggede felttyper til datoer http://dev.mysql.com/doc/mysql/en/DATETIME.html
Avatar billede Slettet bruger
06. december 2004 - 00:15 #4
jakoba: Hvad vil dit script gøre, hvis der database kun indeholder disse poster og måneden i dag er: 09 og år 2004

Dataindhold:
1,09,2004,343242
2,10,2004,3434
3,12,2004,3443
4,01,2005,3545454
5,02,2005,3434

Der mangler jo data fra md 11 år 2004... hvad vil dit script gøre i det tilfelde. Jeg tror ikke man kan lave hele løsningen i mysql.
Avatar billede hmortensen Nybegynder
06. december 2004 - 00:18 #5
Jeg tror vi misforstår dig lidt.

Med data som overstående, hvad vil du gerne ha indlæst i dit array ?
Avatar billede jakoba Nybegynder
06. december 2004 - 00:22 #6
det er ikke noget problem for SQL, den henter blot de rækker i databasen der passer til den givne regel "de næste 6 måneder".
Der kommer så ikke nogen række for november 2004; ønsker du at den skal opfinde en værdi til data feltet når det ikke findes?
Avatar billede Slettet bruger
06. december 2004 - 00:23 #7
Ja. Jeg skal indlæse de data der er i databasen 6 måneder frem... Men som sagt, er det ikke sikkert at der er en post i databasen til hver månede, så derfor skal den bare sætte værdien til 0 i arrayet.

Så mit array vil se sådan ud med ovenstående data:
array(343242,3434,0,3443,3545454,3434)

)
Avatar billede hmortensen Nybegynder
06. december 2004 - 00:26 #8
Hvad vil du med 0 værdi ?

Kan det ikke bruges som følger:
array(343242,3434,3443,3545454,3434)
Avatar billede Slettet bruger
06. december 2004 - 00:27 #9
Nope.... Jeg skal have den med. Skal bruges til stat
Avatar billede Slettet bruger
14. december 2004 - 12:29 #10
Er der virkelig igen der har en ide til dette script ?
Avatar billede jakoba Nybegynder
14. december 2004 - 15:45 #11
Ok, men det er altså ikke SQL, det er bare programmering.

du skal sørge for at læse månedsnumrene efterhånden som du trækker data ud af det (ufuldstæændige) resultatsæt du får

fx:
$foerste_maaned = date( "m" );  // månedsnummer for denne måned
$slut_maaned = $foerste_maaned;  // nu ved vi hvilke mådeder vi vil have
$dit_array = array();            // deklarerer arrayet (vi fylder det senere)

vi skal også have sorteret de hækker der bliver hentet i SQL så vi er sikre på den laveste måned kommer først:
  WHERE  year*12 + md BETWEEN YEAR(NOW())*12 + MONTH(NOW())
                          AND YEAR(NOW())*12 + MONTH(NOW())+6
  ORDER BY md ASC

og nu kan vi lave en løkke til at fylde det der array.

$teller = $foerste_maaned;
$row = mysql_fetch_array( $dit_resultatset );
while ( $teller <= $slut_maaned ) {
    if ( ( $row === false ) ||
        ( $row['md'] != (($teller-1)%12)+1 )
      ){
        $dit_array[] = 0;
    } else {
        $dit_array[] = $row['datafeltet'];
        $row = mysql_fetch_array( $dit_resultatset );
    }
}

mvh JakobA
Avatar billede jakoba Nybegynder
14. december 2004 - 15:47 #12
Ups, jeg glemte sidste linie i løkken
    $teller++;            // tælleren skal incrementers
Avatar billede Slettet bruger
23. marts 2005 - 13:22 #13
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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