21. december 2005 - 17:47Der er
11 kommentarer og 1 løsning
Problemer med dato
Hej eksperter.
Jeg har et lille problem, som sikkert er meget nem at løse, men har snart prøvet så meget.
Jeg har 2 PHP felter indeholdende: $start = "YYYY-MM-DD TT:MM"; (altså et dato felt) $end = "YYYY-MM-DD TT:MM";
i MySQL har jeg så 2 felter i min tabel indeholdende:
felt_start = DATETIME felt_end = DATETIME
Nu vil jeg så tælle om der er nogen rækker inden for min $start og $end.
jeg har prøvet:
SELECT COUNT(*) FROM tabel WHERE felt_start < '$end' AND '$start' < felt_slut
og
SELECT COUNT(*) FROM tabel WHERE felt_start < '$start' AND felt_slut < '$end'
I skal se sammenhængen i et modul, hvor man ikke kan reservere et lokale, når det allerede er udlejet. Så derfor kan der sagtens være overlap som queryen også skal finde.
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Hmmm det havde jeg ikke lige tænkt på, og du har jo nok ret
Synes godt om
Slettet bruger
23. december 2005 - 11:48#4
Det, du er ude efter, er det de rækker, hvor både start og slut er mellem dine kontrolværdier?
Eller de rækker, som bare overlapper perioden med dine kontrolværdier?
Synes godt om
Slettet bruger
23. december 2005 - 11:49#5
Glem det, det havde du jo sagt.
Synes godt om
Slettet bruger
23. december 2005 - 11:59#6
SELECT COUNT(*) FROM tabel WHERE ( felt_start BETWEEN '$start' AND '$end' ) OR ( felt_slut BETWEEN '$start' AND '$end' ) OR ( '$start' BETWEEN felt_start AND felt_slut )
Den første betingelse fanger reserveringer, der starter i din kontrolperiode. Den anden fanger reserveringer, der slutter i din kontrolperiode. Begge de to første fanger også reserveringer, der er helt omsluttet af din kontrolperiode, så der mangler kun at fange reserveringer, som omslutter kontrolperioden. Det klares af den tredje betingelse.
Man kunne også kontrollere om $end er mellem de to felter, men hvis den er, vil en af de andre regler fange den alligevel, så det er overflødigt.
Så nu blev jeg færdig med et andet projekt, og skal nu tilbage og kigge lidt på det her - desværre så virker det ikke.
Men jeg er meget i tvivl om hvordan $start og $end skal se ud. ligenu ser det således ud: YYYY-MM-DD TT:MM men er det den korrekte formatering?
Synes godt om
Slettet bruger
11. januar 2006 - 06:16#9
Ja, det ser ganske fornuftigt ud, men vigtigere er det, at der er tale om felter af typen DATETIME, og det sagde du jo fra starten, at de var, så det burde virke.
Det er forresten ikke så let at gætte, hvad problemet er, når du bare siger at det ikke virker. Især ikke når den kode, vi har set her er OK. Prøv at beskrive _hvordan_ det ikke virker. Kommer der fejlbeskeder, eller giver den forkert svar eller hvad går galt?
I databasen findes der nu: id navn startdato slutdato 1 1 2006-01-01 20:00:00 2006-01-02 20:00:00 2 2 2006-01-02 21:00:00 2006-01-02 22:00:00
Som du nu kan se så er der 2 resultater i min database.
Nu er det sådan at det er en kalender, hvor man kan oprette dato'er for hvornår man er til møde etc.
Så problemet er jo så at hvis man så prøver at lave en der hedder startdato slutdato 2006-01-02 20:30:00 2006-01-05 20:00:00
så skal den komme med en fejl om at der allerede ER lavet en booking. Og det er så her, at jeg ikke kan få queryen til at fungere.
Synes godt om
Slettet bruger
12. januar 2006 - 04:19#11
Og hvilket resultat giver forespørgslen?
Synes godt om
Slettet bruger
12. januar 2006 - 04:21#12
Og husk parenteser hvis du skal kombinere med AND navn='1' eller lignende.
Synes godt om
Ny brugerNybegynder
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.