/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
[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



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste