|
| Gentagne arrangementer fra mysql-database Fra : Mads Lie Jensen |
Dato : 06-03-04 18:26 |
|
Hej
Jeg har en arrangementskalender som ligger i mySQL. En simpel tabel med
dato, tidspunkt, sted og beskrivelse.
Det er jo lige ud af landevejen kun at hente kommende arrangementer osv.
Nu skal den udvides, så hvert arrangement kan gentages. Det kan være 3
torsdage i træk, det kan være første tirsdag i måneden i al fremtid osv.
Men hvordan dælen skla jeg bygge sådan noget op?
Kan det gøres lidt smart vha. sql og et par tabeller?
(Det er til en web-løsning som kodes i php, databasen er mySQL 4.0, dvs
uden subselects)
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Kig også ind på http://hjoerringnyplanteskole.dk/
| |
Jimmy (06-03-2004)
| Kommentar Fra : Jimmy |
Dato : 06-03-04 21:50 |
|
"Mads Lie Jensen" <mads@gartneriet.dk> wrote in message
news:b12k40tcqq2mph8afnde38j5uatdh8spab@4ax.com...
> Hej
>
> Jeg har en arrangementskalender som ligger i mySQL. En simpel tabel med
> dato, tidspunkt, sted og beskrivelse.
>
> Nu skal den udvides, så hvert arrangement kan gentages. Det kan være 3
> torsdage i træk, det kan være første tirsdag i måneden i al fremtid osv.
Skil dine tabeller op, så de kun indeholder den information, der er unik for
dem.
event
-----
ID
Sted
Beskrivelse
Tidspunkt
---------
ID
Ref_Event_ID
Dato
Tid_Fra
Tid_Til
Du henter nu fra tabellen Tidspunkt og LEFT JOIN'er eventen på.
Mvh
Jimmy
| |
Mads Lie Jensen (07-03-2004)
| Kommentar Fra : Mads Lie Jensen |
Dato : 07-03-04 10:10 |
|
On Sat, 6 Mar 2004 21:49:32 +0100, "Jimmy"
<nyhedsgruppe2001@FJERN.yahoo.co.uk> wrote:
>> Jeg har en arrangementskalender som ligger i mySQL. En simpel tabel med
>> dato, tidspunkt, sted og beskrivelse.
>>
>> Nu skal den udvides, så hvert arrangement kan gentages. Det kan være 3
>> torsdage i træk, det kan være første tirsdag i måneden i al fremtid osv.
>
>Skil dine tabeller op, så de kun indeholder den information, der er unik for
>dem.
>
>event
>-----
>ID
>Sted
>Beskrivelse
>
>Tidspunkt
>---------
>ID
>Ref_Event_ID
>Dato
>Tid_Fra
>Tid_Til
>
>Du henter nu fra tabellen Tidspunkt og LEFT JOIN'er eventen på.
Hvorfor left join?
Og hvordan med gentagne arrangementer?
Jeg har sådan noget i den stil i tankerne: Hvis et arrangenemt skal
gentages, så udregn alle datoerne, indsæt en post i Tidspunkt for hver
dato.
Det virker bare lidt ... forkert/besværligt, f.eks hvis et arrangement
skal gentages hver tirsdag i al fremtid, så bliver det jo lidt svært at
indsætte en post i Tidspunkt for alle tirsdage i al fremtid.
(Ok, der bygger jeg så bare noget ind om at al fremtid kun dækker f.eks
10 år frem i tiden eller lign. Men det er jo lidt noget sjusk at gøre
sådan - hvad nu hvis systemet mod forventning stadig er i drift om 10
år?)
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Kig også ind på http://hjoerringnyplanteskole.dk/
| |
Jimmy (07-03-2004)
| Kommentar Fra : Jimmy |
Dato : 07-03-04 10:48 |
|
"Mads Lie Jensen" <mads@gartneriet.dk> wrote in message
news:49pl40lotu2mij1nb3s7dvi7j5e1q3onre@4ax.com...
> On Sat, 6 Mar 2004 21:49:32 +0100, "Jimmy"
> <nyhedsgruppe2001@FJERN.yahoo.co.uk> wrote:
>
> >> Jeg har en arrangementskalender som ligger i mySQL. En simpel tabel med
> >> dato, tidspunkt, sted og beskrivelse.
> >>
> >> Nu skal den udvides, så hvert arrangement kan gentages. Det kan være 3
> >> torsdage i træk, det kan være første tirsdag i måneden i al fremtid
osv.
> >
> >Skil dine tabeller op, så de kun indeholder den information, der er unik
for
> >dem.
> >
> >event
> >-----
> >ID
> >Sted
> >Beskrivelse
> >
> >Tidspunkt
> >---------
> >ID
> >Ref_Event_ID
> >Dato
> >Tid_Fra
> >Tid_Til
> >
> >Du henter nu fra tabellen Tidspunkt og LEFT JOIN'er eventen på.
>
> Hvorfor left join?
Jeg forestiller mig, at du gerne vil vide hvilken event der hører til det
tidspunkt du lige har hentet ud.
> Og hvordan med gentagne arrangementer?
Der indsætter du flere poster i Tidspunkt.
Hvis du vil have løst det uden at gøre dette må du klare det i PHP og ikke i
SQL.
(Ja du *kan* gøre det i MySQL med dets arbitrære streng-operationer, men det
bliver ikke kønt eller nogen hurtig SQL)
Mvh
Jimmy
| |
Mads Lie Jensen (07-03-2004)
| Kommentar Fra : Mads Lie Jensen |
Dato : 07-03-04 11:51 |
|
On Sun, 7 Mar 2004 10:48:26 +0100, "Jimmy"
<nyhedsgruppe2001@FJERN.yahoo.co.uk> wrote:
>> >Du henter nu fra tabellen Tidspunkt og LEFT JOIN'er eventen på.
>>
>> Hvorfor left join?
>
>Jeg forestiller mig, at du gerne vil vide hvilken event der hører til det
>tidspunkt du lige har hentet ud.
Ja selvfølgelig vil jeg have arrangementet med, men hvorfor left join?
Der er ikke tidspunkter uden at der også er et arrangement, og i så fald
er en alm. join nok.
>> Og hvordan med gentagne arrangementer?
>
>Der indsætter du flere poster i Tidspunkt.
>
>Hvis du vil have løst det uden at gøre dette må du klare det i PHP og ikke i
>SQL.
>
>(Ja du *kan* gøre det i MySQL med dets arbitrære streng-operationer, men det
>bliver ikke kønt eller nogen hurtig SQL)
...men det vil nok blive ca. lisså rodet at gøre vha. php.
Så jeg tror jeg holder mig til den her med tidspunkter for sig og
arrangementer for sig.
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Kig også ind på http://hjoerringnyplanteskole.dk/
| |
Jimmy (07-03-2004)
| Kommentar Fra : Jimmy |
Dato : 07-03-04 23:44 |
|
"Mads Lie Jensen" <mads@gartneriet.dk> wrote in message
news:lgvl409s0ecd4o7k9o48qj053tq881rg31@4ax.com...
> On Sun, 7 Mar 2004 10:48:26 +0100, "Jimmy"
> <nyhedsgruppe2001@FJERN.yahoo.co.uk> wrote:
>
> >> >Du henter nu fra tabellen Tidspunkt og LEFT JOIN'er eventen på.
> >>
> >> Hvorfor left join?
> >
> >Jeg forestiller mig, at du gerne vil vide hvilken event der hører til det
> >tidspunkt du lige har hentet ud.
>
> Ja selvfølgelig vil jeg have arrangementet med, men hvorfor left join?
> Der er ikke tidspunkter uden at der også er et arrangement, og i så fald
> er en alm. join nok.
Kan du give et eksempel på¨den join du taler om?
Mvh
Jimmy
| |
Mads Lie Jensen (08-03-2004)
| Kommentar Fra : Mads Lie Jensen |
Dato : 08-03-04 20:12 |
|
On Sun, 7 Mar 2004 23:43:56 +0100, "Jimmy"
<nyhedsgruppe2001@FJERN.yahoo.co.uk> wrote:
>> Ja selvfølgelig vil jeg have arrangementet med, men hvorfor left join?
>> Der er ikke tidspunkter uden at der også er et arrangement, og i så fald
>> er en alm. join nok.
>
>Kan du give et eksempel på¨den join du taler om?
Noget i stil med:
SELECT tidspunkter.*, arrangement.* FROM tidspunkter, arrangement
WHERE tidspunkter.arrangement_id = arrangement.id;
Der vil altid være et arrangement som passer til et tidspunkt - og LEFT
JOIN vil tage _alle_ tidspunkter, også selv om der evt. _ikke_ er et
matchende arrangement.
Når der altid er et matchende arrangement (og fordi der ikke er noget
ved et tidspunkt hvor der ikke er et tilhørende arrangement) så er der
ikke nogen grund til at bruge LEFT JOIN - altså, med mindre jeg overser
noget eller har misforstået et eller andet.
(I praksis vil det så vidt jeg kan se ikke give et andet resultat at
bruge LEFT JOIN i ovenstående, men det kunne det jo godt gøre..)
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Kig også ind på http://hjoerringnyplanteskole.dk/
| |
Jimmy (08-03-2004)
| Kommentar Fra : Jimmy |
Dato : 08-03-04 20:53 |
|
"Mads Lie Jensen" <mads@gartneriet.dk> wrote in message
news:rmgp405pt5gtln4l0e1gnpq0263hi1nu74@4ax.com...
> On Sun, 7 Mar 2004 23:43:56 +0100, "Jimmy"
> <nyhedsgruppe2001@FJERN.yahoo.co.uk> wrote:
>
> >> Ja selvfølgelig vil jeg have arrangementet med, men hvorfor left join?
> >> Der er ikke tidspunkter uden at der også er et arrangement, og i så
fald
> >> er en alm. join nok.
> >
> >Kan du give et eksempel på¨den join du taler om?
>
> Noget i stil med:
>
> SELECT tidspunkter.*, arrangement.* FROM tidspunkter, arrangement
> WHERE tidspunkter.arrangement_id = arrangement.id;
Jamen det er da blot en implicit JOIN, som er lig en LEFT JOIN.
Nogen der kan af/bekræfte?
Mvh
Jimmy
| |
Mads Lie Jensen (08-03-2004)
| Kommentar Fra : Mads Lie Jensen |
Dato : 08-03-04 21:40 |
|
On Mon, 8 Mar 2004 20:52:53 +0100, "Jimmy"
<nyhedsgruppe2001@FJERN.yahoo.co.uk> wrote:
>> SELECT tidspunkter.*, arrangement.* FROM tidspunkter, arrangement
>> WHERE tidspunkter.arrangement_id = arrangement.id;
>
>Jamen det er da blot en implicit JOIN, som er lig en LEFT JOIN.
>
>Nogen der kan af/bekræfte?
Ifølge min mySQL-manual er de to bestemt ikke ens.
Ovenstående query med LEFT JOIN vil se ud som:
SELECT tidspunkter.*, arrangement.*
FROM tidspunkter LEFT JOIN arrangement ON (tidspunkter.arrangement_id =
arrangement.id);
Her vil resultatet være _alle_ poster fra tidspunkter, også selv om der
for et tidspunkt ikke skulle være en matchende post i arrangementer.
Den første version vil kun give poster hvor der er et matchende
arrangement - hvis arrangementet for et tidspunkt mangler, så kommer
tidspunktet heller ikke med.
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Kig også ind på http://hjoerringnyplanteskole.dk/
| |
Peter Brodersen (09-03-2004)
| Kommentar Fra : Peter Brodersen |
Dato : 09-03-04 00:40 |
|
On Mon, 8 Mar 2004 20:52:53 +0100, "Jimmy"
<nyhedsgruppe2001@FJERN.yahoo.co.uk> wrote:
>Jamen det er da blot en implicit JOIN, som er lig en LEFT JOIN.
Det er vist en INNER JOIN, du tænker på.
WHERE-delen afgrænser antallet af rows (som en INNER JOIN), hvorimod
en LEFT JOIN stadigvæk vil returnere rækker, hvor venstresiden ikke
har noget at join'e med på højresiden - felter fra højresiden(s tabel)
vil blot være NULL.
--
- Peter Brodersen
Ugens sprogtip: også (og ikke osse)
| |
Jimmy (09-03-2004)
| Kommentar Fra : Jimmy |
Dato : 09-03-04 07:18 |
|
"Peter Brodersen" <usenet@ter.dk> wrote in message
news:c2j08e$4mo$2@dknews.tiscali.dk...
> On Mon, 8 Mar 2004 20:52:53 +0100, "Jimmy"
> <nyhedsgruppe2001@FJERN.yahoo.co.uk> wrote:
>
> >Jamen det er da blot en implicit JOIN, som er lig en LEFT JOIN.
>
> Det er vist en INNER JOIN, du tænker på.
Ja, du har ret.
Men det har du jo altid
Tak,
Jimmy
| |
Kim Andersen (08-03-2004)
| Kommentar Fra : Kim Andersen |
Dato : 08-03-04 12:25 |
|
Du kan bruge MySQL til at beregne det næste tidspuntk, hvis det eks. skal
være hver den sidste torsdag i hver anden månede.
+ INTERVAL xx DAYS eks, kan gøre den del.
Bruger selv MySQL og lidt C++ kode til at lave gentagende møder ala Outlook
kan.
/Kim
| |
Mads Lie Jensen (08-03-2004)
| Kommentar Fra : Mads Lie Jensen |
Dato : 08-03-04 20:26 |
|
On Mon, 8 Mar 2004 12:24:55 +0100, "Kim Andersen" <_dingdong@dingeling>
wrote:
>Du kan bruge MySQL til at beregne det næste tidspuntk, hvis det eks. skal
>være hver den sidste torsdag i hver anden månede.
>
>+ INTERVAL xx DAYS eks, kan gøre den del.
Jeg er ikke helt med? Kan du evt. give et eksempel?
>Bruger selv MySQL og lidt C++ kode til at lave gentagende møder ala Outlook
>kan.
Lyder spændende - var det noget jeg evt. kunne få lov at se lidt mere
af?
(Jeg har på fornemmelsen jeg er ved at forvirre mig selv mere end godt
er
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Kig også ind på http://hjoerringnyplanteskole.dk/
| |
Kim Andersen (09-03-2004)
| Kommentar Fra : Kim Andersen |
Dato : 09-03-04 09:44 |
|
I eks. Outlook, når aftaler gemmes med gentagende aftaler, laves en sætning
som kan se ud som denne.
FREQ=MONTHLY;UNTIL=20050515T060000Z;INTERVAL=2;BYMONTHDAY=15;WKST=SU
Udover dette er der også en datetime start og en datetime end.
Reglen her, er at den gentages hver anden månede, d. 15. Så har man mulighed
for i MySQL at tælle to måneder frem.
'2004-05-15 14:00:00' = SELECT '2004-03-15 14:00:00' + INTERVAL 2 MONTH
Der er også defineret en UNTIL, så når man når denne dato, skal man ikke
tæller ligner frem. Hvis der ingen UNTIL er, kan man jo tæller 10 år frem i
tiden.
--------------
Hvis man skal have noget til at virke hver tirsdag i tre uger kan man gøre
noget som dette.
SELECT '2004-03-09 14:00:00' + INTERVAL 7 DAYS - og så gentage den tre
gange.
Man skal vide at d. 9/3 er en tirsdag,
--------------
Håber du kan bruge det til noget.
/Kim
| |
Mads Lie Jensen (09-03-2004)
| Kommentar Fra : Mads Lie Jensen |
Dato : 09-03-04 17:23 |
|
On Tue, 9 Mar 2004 09:43:51 +0100, "Kim Andersen" <_dingdong@dingeling>
wrote:
<klip>
>
>Hvis man skal have noget til at virke hver tirsdag i tre uger kan man gøre
>noget som dette.
>
>SELECT '2004-03-09 14:00:00' + INTERVAL 7 DAYS - og så gentage den tre
>gange.
>
>Man skal vide at d. 9/3 er en tirsdag,
>
>Håber du kan bruge det til noget.
Jo, jeg kommer da nærmere hele tiden
Jeg har i mellemtiden fået den 'geniale' ide at hente nogle af de
opensource kalenderløsninger som er skrevet til php/mysql og snuse lidt
i koden.
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Kig også ind på http://hjoerringnyplanteskole.dk/
| |
|
|