/ 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] Udtræk fra tabeller med relation >~
Fra : Bjarke Walling Peter~


Dato : 19-11-03 15:31

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



 
 
Bjarke Walling Peter~ (21-11-2003)
Kommentar
Fra : Bjarke Walling Peter~


Dato : 21-11-03 00:32

Efter en del tænkning og en masse læsning på MySQL-dokumentationen har jeg
selv fundet frem til løsningerne - bl.a. med en funktion kaldet
group_concat. Det eneste problem er, at det kræver MySQL 4.1, som kun er i
alpha-release. I øvrigt venter jeg i stor spænding på 5.0/5.1 med views - så
skal man kun have besværet med at oprette views - derefter kan man blot
udtrække data, som man har lyst. Se, dét glæder jeg mig til.
Måske man skulle forsøge at overtale sin host til at benytte andre
SQL-servere...

Mvh. Bjarke



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

Månedens bedste
Årets bedste
Sidste års bedste