| Re: MySQL inline view med statiske data |
|
 |
|
 |
|
 |
|
 |
Group: dk.edb.database · Group Profile
Author: Michael ZedelerMichael Zedeler Date: Apr 22, 2008 08:03
Morten wrote:
> On Apr 22, 7:59 am, Michael Zedeler wrote:
>> Morten wrote:
>>> Hej, jeg har en applikation hvor brugeren vælger en dato range, fex.
>>> 2008-04-01 til 2008-04-03. Denne benyttes til at tælle antal events
>>> der var "åbne" på den givne dato, altså for hver dato some_date findes
>>> events hvor "some_date BETWEEN events.start_date AND events.end_date"
>>> Udfordringen er, at få datoerne sendt til MySQL, her er en måde:
>>> SELECT date_range.some_day, COUNT(*)
>>> FROM events, (
>>> SELECT DATE('2008-04-01') AS some_day FROM DUAL UNION ALL
>>> SELECT DATE('2008-04-02') FROM DUAL UNION ALL
>>> SELECT DATE('2008-04-03') FROM DUAL
>>> ) AS date_range
>>> WHERE date_range.some_day BETWEEN events.start_date AND
>>> events.end_date
>>> GROUP BY 1
>> Hvorfor ikke bare noget i denne stil?
>>
>> select count(*), date(events.start_date)
>> from events
>> where events.start_date between '2008-04-01' and '2008-04-03'
>> group by date(events.start_date)
>>
>> Så kan du godt nok få huller med dage uden begivenheder, men dem må du
>> fylde op selv.
>
> Det er altid rart med input fra dig så tak for det. Jeg har måske fået
> tænkt mig selv op i en krog, men jeg er ikke helt sikker på at det du
> skriver dækker.
>
> Det der driver dato-intervallet, er brugerens input range, ikke event
> start/stop. Så hvis en bruger søger i intervallet 2008-04-01 til
> 2008-04-03, og der er events med start_date 2008-03-31 og end_date
> 2008-04-02 så kommer de ikke med i din query så vidt jeg kan vurdere.
Så du er interesseret i begivenheder der også ligger "hen over"
intervallet. I så fald kan du bare skrive sådan her:
SELECT *
FROM events
WHERE NOT (events.end < '2008-03-31' OR events.start > '2008-04-03)
Mvh. Michael.
|