|
| [MySQL] IF problemer Fra : Martin |
Dato : 20-12-05 06:53 |
|
Sidder lige og roder lidt med IF'er i MySQL.
I skal se det som en event kalender, eller lign.
Events kan strække sig over flere dage, eller bare over et par timer.
Tabellen:
id = auto_increment
n = varchar(255)
sd = DATETIME
ed = DATETIME
n = navn
sd = startdato
ed = enddato
Min query, som ikke rigtig virker, dvs jeg får en fejl på linje 3, men
kan slet ikk se fejlen.
Hvis jeg fjerner DATE_FORMAT fra if'erne så virker queryen, men jeg får
ikke det ønskede resultat.
Jeg vil gætte på det måske er selve statementet der er helt galt, altså
sd=DATE og ed=DATE
SELECT
IF(sd=DATE('".$date."'),DATE_FORMAT(sd,'%H:%i'),'<') AS start,
IF(ed=DATE('".$date."'),DATE_FORMAT(ed,'%H:%i),'>') AS end,
n,
id
FROM test
WHERE '".$date."' BETWEEN sd AND ed
Mit resultat vil jeg gerne have til at se sådan her ud:
HVIS startdato = $date, så skal der stå %H:%i ellers så skal der stå <
HVIS enddato = $date, så skal der stå %H:%i ellers så skal der stå >
Mine 3 records ser sådan her ud
ID N SD ED
1 trut 2005-12-01 06:20:00 2005-12-03 11:00:00
2 bum 2005-12-19 07:00:00 2005-12-20 13:00:00
3 jul 2005-12-24 11:00:00 2005-12-24 13:00:00
Så min "kalender" burde komme til at se noget lign ud.
1/12: 06:20 trut >
2/12: < trut >
3/12: < trut 11:00
....
19/12: 07:00 bum >
20/12: < bum 13:00
....
24/12: 11:00 jul 13:00
| |
Peter Brodersen (20-12-2005)
| Kommentar Fra : Peter Brodersen |
Dato : 20-12-05 12:47 |
|
On Tue, 20 Dec 2005 06:52:45 +0100, Martin <news@natten-i.dk> wrote:
>Min query, som ikke rigtig virker, dvs jeg får en fejl på linje 3, men
>kan slet ikk se fejlen.
Du bliver nødt til at sige, hvilken fejl, du får.
Du bør også outputte din præcise query *efter* $date er blevet
erstattet med passende variable.
Det lader til at du bruger PHP. Smid hele forespørgslen ind i en
variabel og print den, så du kan se, hvad den rent faktisk indeholder
(og ikke hvad du tror, den indeholder )
--
- Peter Brodersen
Find dig selv: http://map.ter.dk/
| |
Martin (20-12-2005)
| Kommentar Fra : Martin |
Dato : 20-12-05 16:03 |
|
Peter Brodersen wrote:
> On Tue, 20 Dec 2005 06:52:45 +0100, Martin <news@natten-i.dk> wrote:
>
>> Min query, som ikke rigtig virker, dvs jeg får en fejl på linje 3, men
>> kan slet ikk se fejlen.
>
> Du bliver nødt til at sige, hvilken fejl, du får.
jeg fandt fejlen, manglede en ' i den sidste DATE_FORMAT, men desværre
virker det ikke, eller det vil sige jeg får ikke nogen fejl mere, men
min query må være forkert.
Min query ser således ud:
SELECT
IF(sd=DATE('2005-12-01'),DATE_FORMAT(sd,'%H:%i'),'<') AS start,
IF(ed=DATE('2005-12-01'),DATE_FORMAT(ed,'%H:%i'),'>') AS end,
n,
id
FROM test
WHERE '2005-12-01' BETWEEN sd AND ed
i 2005-12-01 der tæller 01 fra 01 til og med 31.
jeg har også prøvet:
SELECT
IF(DATE_FORMAT(sd,'%Y-%m-%d')=DATE('2005-12-01'),DATE_FORMAT(sd,'%H:%i'),'<')
AS start,
IF(DATE_FORMAT(sd,'%Y-%m-%d')=DATE('2005-12-01'),DATE_FORMAT(ed,'%H:%i'),'>')
AS end,
n,
id
FROM test
WHERE '2005-12-01' BETWEEN sd AND ed
Men i begge querys får jeg følgende output:
ID N SD ED
1 trut < >
1 trut < >
2 bum < >
>
> Du bør også outputte din præcise query *efter* $date er blevet
> erstattet med passende variable.
>
> Det lader til at du bruger PHP. Smid hele forespørgslen ind i en
> variabel og print den, så du kan se, hvad den rent faktisk indeholder
> (og ikke hvad du tror, den indeholder )
>
| |
Peter Brodersen (20-12-2005)
| Kommentar Fra : Peter Brodersen |
Dato : 20-12-05 16:15 |
|
On Tue, 20 Dec 2005 16:02:35 +0100, Martin <news@natten-i.dk> wrote:
>Men i begge querys får jeg følgende output:
>
>ID N SD ED
>1 trut < >
>1 trut < >
>2 bum < >
Prøv evt. også at select'e sd og ed ud, så vi kan se, hvad de
indeholder.
--
- Peter Brodersen
Find dig selv: http://map.ter.dk/
| |
Martin (20-12-2005)
| Kommentar Fra : Martin |
Dato : 20-12-05 16:56 |
|
Peter Brodersen wrote:
> On Tue, 20 Dec 2005 16:02:35 +0100, Martin <news@natten-i.dk> wrote:
>
>> Men i begge querys får jeg følgende output:
>>
>> ID N SD ED
>> 1 trut < >
>> 1 trut < >
>> 2 bum < >
>
> Prøv evt. også at select'e sd og ed ud, så vi kan se, hvad de
> indeholder.
>
SELECT
IF(DATE_FORMAT(sd,'%Y-%m-%d')=DATE('".$date."'),DATE_FORMAT(sd,'%H:%i'),'<')
AS start,
IF(DATE_FORMAT(sd,'%Y-%m-%d')=DATE('".$date."'),DATE_FORMAT(ed,'%H:%i'),'>')
AS end,
n,
id,
sd,
ed
FROM test
WHERE
'".$date."' BETWEEN sd AND ed
ID: 1
N: trut
Start: <
End: >
SD: 2005-12-01 06:20:00
ED: 2005-12-03 11:00:00
ID: 1
N: trut
Start: <
End: >
SD: 2005-12-01 06:20:00
ED: 2005-12-03 11:00:00
ID: 2
N: bum
Start: <
End: >
SD: 2005-12-19 07:00:00
ED: 2005-12-20 13:00:00
| |
Peter Brodersen (20-12-2005)
| Kommentar Fra : Peter Brodersen |
Dato : 20-12-05 17:28 |
|
On Tue, 20 Dec 2005 16:56:15 +0100, Martin <news@natten-i.dk> wrote:
>> Prøv evt. også at select'e sd og ed ud, så vi kan se, hvad de
>> indeholder.
>>
>
>SELECT
Ehm, nu kan jeg ikke se hvilken $date, du har brugt.
Men jeg synes, det er lidt pudsigt, at $date kan være mellem
"2005-12-01 06:20:00" og "2005-12-03 11:00:00", og $date samtidig kan
være mellem "2005-12-19 07:00:00" og "2005-12-20 13:00:00"...? Det
synes jeg ikke giver mening.
--
- Peter Brodersen
Find dig selv: http://map.ter.dk/
| |
Martin (20-12-2005)
| Kommentar Fra : Martin |
Dato : 20-12-05 18:35 |
|
Peter Brodersen wrote:
> On Tue, 20 Dec 2005 16:56:15 +0100, Martin <news@natten-i.dk> wrote:
>
>>> Prøv evt. også at select'e sd og ed ud, så vi kan se, hvad de
>>> indeholder.
>>>
>> SELECT
>
> Ehm, nu kan jeg ikke se hvilken $date, du har brugt.
>
> Men jeg synes, det er lidt pudsigt, at $date kan være mellem
> "2005-12-01 06:20:00" og "2005-12-03 11:00:00", og $date samtidig kan
> være mellem "2005-12-19 07:00:00" og "2005-12-20 13:00:00"...? Det
> synes jeg ikke giver mening.
>
Som jeg skrev i første indlæg - så er det en løkke der kører
2005-12-01 -> 2005-12-31
Altså 01 skifter fra 01->02->03....->30->31
| |
Kristian Damm Jensen (21-12-2005)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 21-12-05 16:42 |
|
"Martin" <news@natten-i.dk> wrote in message
news:43a81d04$0$99997$edfadb0f@dread16.news.tele.dk...
> Peter Brodersen wrote:
>> On Tue, 20 Dec 2005 06:52:45 +0100, Martin <news@natten-i.dk> wrote:
>>
>>> Min query, som ikke rigtig virker, dvs jeg får en fejl på linje 3, men
>>> kan slet ikk se fejlen.
>>
>> Du bliver nødt til at sige, hvilken fejl, du får.
>
> jeg fandt fejlen, manglede en ' i den sidste DATE_FORMAT, men desværre
> virker det ikke, eller det vil sige jeg får ikke nogen fejl mere, men min
> query må være forkert.
>
> Min query ser således ud:
>
> SELECT
> IF(sd=DATE('2005-12-01'),DATE_FORMAT(sd,'%H:%i'),'<') AS start,
> IF(ed=DATE('2005-12-01'),DATE_FORMAT(ed,'%H:%i'),'>') AS end,
> n,
> id
> FROM test
> WHERE '2005-12-01' BETWEEN sd AND ed
Når sd og ed indeholder klokkeslet, giver denne betingelse ikke det resultat
du ønsker.
VH
Kristian
| |
|
|