03. august 2010 - 17:06Der er
20 kommentarer og 1 løsning
Relativt kompleks forespørgsel
Hej eksperter,
Lad os antage, at jeg har følgende tabeller:
Brugere - Id (int)
Grupper - Id (int) - Navn (varchar)
Gruppemedlemskaber - Id (int, formentligt irrelevant) - Gruppe (int - reference til gruppes Id) - Bruger (int - reference til brugers Id)
Projekter - Id (int) - Gruppe (int - reference til gruppes Id) - Beskrivelse (varchar)
Gruppemedlemskaber parrer grupper og brugere og repræsenterer således medlemskab, således at en gruppedeltagelse med Gruppe=G og Bruger=B medfører, at brugeren med Id=B er medlem af gruppen med Id=G. Det er mere enkelt, end jeg forklarer det!
Nu vil jeg gerne have udskrevet en liste over beskrivelserne på de projekter, en bruger (ud fra brugers Id) deltager i; dvs. samtlige projekter, hvor projektets Gruppe er lig Gruppe for et gruppemedlemskab, hvor Bruger samtidig er lig brugerens Id. Samtidig skal jeg for hvert output vide, hvad gruppens navn er - altså Navn for den gruppe, hvor Id samtidig er lig projektets Gruppe.
For at opsummere: Jeg skal have udskrevet Beskrivelse for hvert projekt, brugeren via grupper deltager i samt den forbindende gruppes Navn.
Kan det gøres med et enkelt MySQL-request (fra PHP) - og hvordan? I modsatte fald må jeg stykke noget sammen af en løkke og lidt gaffa.
SELECT projekter.beskrivelse FROM brugere,gruppemedlemskaber,grupper,projekter WHERE brugere.id=gruppemedlemskaber.bruger AND gruppemedlemskaber.gruppe=gruppe.id AND gruppe.id=projekter,gruppe AND bruger.id=x
jeg ville ioevrigt droppe feltet Gruppemedlemskaber.id og lave en sammensat primaernoegle
Synes godt om
Slettet bruger
03. august 2010 - 19:55#4
Tak. Inden jeg fortsætter: "jeg ville ioevrigt droppe feltet Gruppemedlemskaber.id og lave en sammensat primaernoegle" Det lyder fancy; hvad er en sammensat primærnøgle?
De 4 kopier skyldes altsaa en haengende FF og ikke en mening om at indholdet var 4 kopier vaerd ...
:-)
Synes godt om
Slettet bruger
03. august 2010 - 21:06#11
Det skader nok ikke at læse det igennem fire gange :)
Synes godt om
Slettet bruger
03. august 2010 - 21:28#12
SELECT `projekt.id`, `projekt.time`, `projekt.title`, `projekt.desc`, `gruppe.id`, `gruppe.label` FROM `gruppe`, `medlemskab`, `projekt` WHERE (`class` = '1') AND (`projekt.owner` = `gruppe.id`) AND (`gruppe.id` = `medlemskab.group`) AND (`medlemskab.user` = '1') AND (`time` = '1280102400')
Unknown column 'projekt.id' in 'field list'
???
Synes godt om
Slettet bruger
03. august 2010 - 21:35#13
Rettet til:
SELECT `projekt.id`, `projekt.time`, `projekt.title`, `projekt.desc`, `gruppe.id`, `gruppe.label` FROM `gruppe`, `medlemskab`, `projekt` WHERE (`projekt.class` = '1') AND (`projekt.owner` = `gruppe.id`) AND (`gruppe.id` = `medlemskab.group`) AND (`medlemskab.user` = '1') AND (`projekt.time` = '1280102400')
Fejlen forbliver.
Synes godt om
Slettet bruger
04. august 2010 - 13:48#14
Anyone? :(
Synes godt om
Slettet bruger
05. august 2010 - 10:01#15
....................................... Det er selvfølgeligt `tabel`.`kolonne` og ikke `tabel.kolonne`.
Synes godt om
Slettet bruger
05. august 2010 - 10:28#16
Nu bliver det endnu sjovere :) Jeg vil gerne sortere noget data efter, hvorvidt en forbindelse eksisterer. For at være specifik:
Brugere - Id (int)
Grupper - Id (int) - Navn (varchar)
Gruppemedlemskaber - Gruppe (int - reference til gruppes Id) - Bruger (int - reference til brugers Id)
Projekter - Id (int) - Gruppe (int - reference til gruppes Id) - Beskrivelse (varchar)
Tilstede - Projekt (int - reference til projektets Id) - Bruger (int - reference til brugerens Id)
Hvordan kan jeg så tilføje en sortering til query'en, så bruger/projekt-par for hvilken en entry i Tilstede findes kommer før dem, for hvilken ingen entry i Tilstede eksisterer? Kan dette stadig gøres med en enkelt query?
Hvis det oprindelige spørgsmål er blevet besvaret, er det på sin plads at lukke, ved at anmode om svar i dette tilfælde fra arne_v. For derefter at oprette et nyt spørgsmål der vedr. det nye "issue".
mvh Simon
Synes godt om
Slettet bruger
15. august 2010 - 21:36#18
Tja, hvis nogen alligevel kendte svaret, kunne det lige så godt komme frem her, men jeg har faktisk hittet ud af det i mellemtiden.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.