|  | 		    
					
        
         
          
         
	
          | |  | [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
 
 
 
 
 |  |  | 
 |  |