Avatar billede jakobsen Nybegynder
22. februar 2007 - 09:14 Der er 3 kommentarer

select efter tal

hej

jeg har nogle medlemsdata, der hvornår medlemmer har oprettet sig
f.eks. 1/1 , 4/8, 3/6 osv.

jeg vil gerne trække ud af databasen efter datoer,
f.eks. fra 2/1 -> 3/4

jeg har nogle alm. select/option menuer med datoer
og måneder, hvordan får jeg lavet en select i mysql der vil virke?

select from medlem where datomaaned fra 1 -> 4 ?
Avatar billede kjulius Novice
22. februar 2007 - 11:42 #1
Det er faktisk lidt svært at svare på. Principielt bør du konvertere informationerne i dine select/option menuer til en dato (jeg går ud fra, at du har gemt oprettelsesdatoen i en dato-variabel i databasen). Det kan du evt. gøre i dit scriptsprog, men du kan også benytte MySQL funktionen STR_TO_DATE(), der som navnet antyder konverterer en streng til en dato. For at kunne konvertere korrekt (en streng kan jo se ud på tusind måder), skal du angive hvordan strengen er formatteret. Hvis du kigger i din MySQL manual, vil du kunne se hvilke muligheder der er for at angive dato-elementer (tabellen med formatteringselementer finder du dog under STR_TO_DATE's modpol DATE_FORMAT).

Når du så har konverteret til datoer (fradato og tildato) er det egentligt meget nemt, for så kan du sætte det ind i WHERE delen af din forespørgsel med en BETWEEN:

SELECT * FROM medlem WHERE oprdato BETWEEN fradato AND tildato

Hvis vi nu vender tilbage til, hvordan du får konstrueret en fra-/tildato med STR_TO_DATE, så er det nok mindst lige så nemt at konstruere en streng i dit scriptsprog, men da du jo har placeret spørgsmålet under MySQL, så vil jeg prøve at danne den vha. SQL funktioner. Jeg vil her bruge funktionen CONCAT_WS, hvor man kan angive en separator mellem de dele man sammensætter. Hvis jeg altså vil indsætte en bindestreg mellem elementerne dag, måned og år:

CONCAT_WS('-', dag, md, år)

Så hvis vi nu skal prøve at sætte det hele sammen:

SELECT *
FROM medlem
WHERE oprdato BETWEEN STR_TO_DATE(CONCAT_WS('-', fradag, framd, fraår), '%e-%c-%y') AND STR_TO_DATE(CONCAT_WS('-', tildag, tilmd, tilår), '%e-%c-%y')

Formatteringsstrengen skal naturligvis tilpasses de strenge dine select/option menuer returnerer datoelementerne. Der er mange muligheder, så jeg er sikker på, at du finder det rette.

Jeg håber dette kan hjælpe dig på vej...
Avatar billede jakobsen Nybegynder
25. februar 2007 - 09:57 #2
super ok
Avatar billede kjulius Novice
02. august 2007 - 18:14 #3
Hvis du fik svar på dit spørgsmål, mangler vi bare at få spørgsmålet lukket. :-)
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