Vinnaren i pepparkakshustävlingen!
2008-04-18, 15:27
  #1
Medlem
mannenmedhattens avatar
Hej! Går det att ta ut flera värden (som lämpligtvis(?) en array) från flera tabeller med utgång från en specifik post? Jag vet, dåligt formulerat och förklarat. Men här kommer ett konkret exempel:

Låt säga att jag har Tabell A, som innehåller id,fordon och antalhjul. Jag har även Tabell B, som är i relation mot Tabell A, som innehåller fordonsId och förarnamn. En förare kan ha flera fordon.

Nu vill jag fånga upp alla förare och deras fordon för jag vill skicka ett brev till dem. Jag vill ju dock inte att en förare ska få flera brev om han har flera fordon utan bara ett brev med de fordon som han har. Om föraren Karl har två fordon (en moped och en halvskrutten bil) så vill jag inte att han ska få två brev.

Går detta att göra, eller har ni några andra förslag än att göra detta i sql-satsen? (hoppas ni förstår)
Citera
2008-04-19, 00:12
  #2
Medlem
googlevistas avatar
Det går inte att göra i en enda sql-fråga.

Hur man går tillväga beror väl lite på vilket programmeringsspråk man använder, men du måste ju i princip alltid hämta alla fordonsförare först, och sen loopa genom dessa och för var och en hämta vilka fordon de har.
Citera
2008-04-19, 01:32
  #3
Medlem
I PostgreSQL:
Kod:
SELECT
   forare.id,
   max(forare.namn),         -- hax
   array_accum(fordon.namn)
FROM
   forare
LEFT JOIN
   forare_fordon AS ff ON forare.id = ff.forare_id
LEFT JOIN
   fordon ON ff.fordon_id = fordon.id
GROUP BY
   forare.id;

 id |      max      |    array_accum     
----+---------------+--------------------
  1 | Åke Svensson  | {Volvo}
  3 | Nisse Persson | {NULL}
  2 | Nisse Persson | {Volvo,SAAB,Moppe}
(3 rows)

Men jag antar att du kör MySQL som alla andra? MySQL har vad jag vet inget stöd för arrayer, men jag antar att du skulle kunna använda group_concat() för att emulera array_accum().
Citera
2008-04-19, 03:23
  #4
Medlem
mannenmedhattens avatar
yepp, kör mysql...
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback