Nikolaj Hansen skrev:
> Det du lyder til at være ude efter er en N:M relation mellem din "Nyhed"
> og din "HTMLSide". Dvs. at en nyhed kan vises på flere sider og en side
> kan have flere nyheder.
>
> Det kan man da bare lave som en ganske gængs N:M relation med en mellem
> tabel?
>
> Det kan du både indeksere og sortere korrekt efter i en alm. relationel
> database.
Okay - jeg går ud fra at du tænkte på noget lignende følgende opbygning (i
en forsimplet udgave):
nyheder: id, dato, titel, tekst -- indeholder nyheder.
visning: nyhed_id, sted_id -- relation mellem en nyhed og steder den vises.
steder: id, navn -- indeholder steder.
Tabellerne 'nyheder' og 'steder' har en 'id' som er primær nøgle og med
autonummering. Tabellen 'visning' er relationen mellem en nyhed og de
steder den vises.
Jeg har nogle opgaver, der skal løses, men jeg kan kun finde ud af den
første. Nogen der vil hjælpe?
Opgave 1: Udtræk nyheder, som bliver vist et bestemt sted.
Løsning:
SELECT nyheder.id, nyheder.dato, nyheder.titel, nyheder.tekst FROM nyheder,
visning, steder WHERE nyheder.id = visning.nyhed_id AND steder.id =
visning.sted_id AND steder.navn = 'bestemt_sted'
Opgave 2: Udtræk nyheder nyere end en bestemt dato sammen med et ekstra
felt, der kommasepareret (eller separeret på anden måde) indeholder de
steder nyheden bliver vist.
Eksempel på resultat:
'id', 'dato', 'titel', 'tekst', 'sted'
1, 2003-11-16, 'A', 'abc', 'Sted1'
2, 2003-11-17, 'C', 'ghi', 'Sted1,Sted3,Sted4'
3, 2003-11-18, 'A', 'abc', 'Sted2'
4, 2003-11-19, 'B', 'def', 'Sted1,Sted3'
Løsning: Ved det ikke. Nogle forslag? - eller andre måder at gøre det på.
Sandsynligvis kan det ikke lade sig gøre, men hvad gør man så? Skal jeg
udtrække alle nyhederne først og så for hver eneste nyhed udtrække de steder
den vises - det bliver jo en del SQL-kald.
Opgave 3: Udtræk nyheder sorteret efter det sted de bliver vist. Dem som
bliver vist ét sted, skal være først, etc.
Eksempel på resultat:
Samme som i opgave 2 - blot i rækkefølgen (efter 'id'): 1, 3, 4, 2.
Løsning: Ved det ikke. Nogle forslag? - eller andre måder at gøre det på.
Jeg vil tro at det kan løses med COUNT måske - på en eller anden måde. Kan
bare ikke lige finde ud af hvordan.
På forhånd tak!
Mvh. Bjarke
|