Vinnaren i pepparkakshustävlingen!
2013-12-20, 12:44
  #1
Medlem
atitaranta-s avatar
I en bilddatabas kan jag få fram efternamnen personerna på bild nr 1 med följande query:

Kod:
SELECT bildnr, GROUP_CONCAT(p.efternamn)
FROM bilder AS b
INNER JOIN k_pers_bild as kpb ON kpb.bildid = b.id
INNER JOIN personer as p ON kpb.personid = p.id
WHERE bildnr = 1

På liknande sätt får jag fram nyckelorden så här:

Kod:
SELECT bildnr, GROUP_CONCAT(n.ord) 
FROM bilder as b
INNER JOIN k_nyckelord_bild AS k_nb ON k_nb.bildid = b.id
INNER JOIN nyckelord AS n ON n.id = k_nb.ordid
WHERE bildnr = 1

Frågan är hur jag får fram både efternamn och nyckelord för en viss bild med bara en query. Följande funkar ju inte.

Kod:
SELECT bildnr, GROUP_CONCAT(p.efternamn), GROUP_CONCAT(n.ord)
FROM bilder AS b
INNER JOIN k_pers_bild as kpb ON kpb.bildid = b.id
INNER JOIN personer as p ON kpb.personid = p.id
INNER JOIN k_nyckelord_bild AS k_nb ON k_nb.bildid = b.id
INNER JOIN nyckelord AS n ON n.id = k_nb.ordid
WHERE bildnr = 1

Förslag?
Citera
2013-12-20, 13:06
  #2
Medlem
RompeTodos avatar
Enligt mig blir det jobbigt att försöka lösa det utan en bild på tabellerna (kanske för att jag själv inte är jätteerfaren) men jag är säker på att du får hjälp snabbare om du kan ladda upp en bild med dina tabeller.
Citera
2013-12-20, 15:26
  #3
Medlem
Varför måste det vara i samma query? Funkar en union?
Citera
2013-12-20, 17:16
  #4
Medlem
atitaranta-s avatar
Citat:
Ursprungligen postat av Koenigsegg
Varför måste det vara i samma query? Funkar en union?
Nja, jag var också inne på UNION ett tag, men det är rätt mycket mer data som ska hämtas än jag tog med i exemplet, så SELECT-delen är kraftigt förenklad här. Det är även ytterligare en JOIN inblandad som jag utelämnade eftersom någon GROUP_CONCAT inte behövs där. Så det kändes lite överlastat att försöka få ihop en UNION på de grunderna.
Citera
2013-12-20, 20:20
  #5
Moderator
Protons avatar
Citat:
Ursprungligen postat av atitaranta-
I en bilddatabas kan jag få fram efternamnen personerna på bild nr 1 med följande query:

Kod:
SELECT bildnr, GROUP_CONCAT(p.efternamn)
FROM bilder AS b
INNER JOIN k_pers_bild as kpb ON kpb.bildid = b.id
INNER JOIN personer as p ON kpb.personid = p.id
WHERE bildnr = 1

På liknande sätt får jag fram nyckelorden så här:

Kod:
SELECT tbl1.bildnr, GROUP_CONCAT(n.ord) 
FROM bilder as b
INNER JOIN k_nyckelord_bild AS k_nb ON k_nb.bildid = b.id
INNER JOIN nyckelord AS n ON n.id = k_nb.ordid
WHERE bildnr = 1

Frågan är hur jag får fram både efternamn och nyckelord för en viss bild med bara en query. Följande funkar ju inte.

Kod:
SELECT bildnr, GROUP_CONCAT(p.efternamn), GROUP_CONCAT(n.ord)
FROM bilder AS b
INNER JOIN k_pers_bild as kpb ON kpb.bildid = b.id
INNER JOIN personer as p ON kpb.personid = p.id
INNER JOIN k_nyckelord_bild AS k_nb ON k_nb.bildid = b.id
INNER JOIN nyckelord AS n ON n.id = k_nb.ordid
WHERE bildnr = 1

Förslag?
Du har ju två set innehållandes den data du vill ha, dessutom har du ju ett bildid som minsta gemensamma nämnare för dessa set. Kan du inte bara joina ihop dem rätt upp och ner?

Kod:
SELECT bildnrtbl1.enamntbl2.keyword 
FROM
(
SELECT bildnrGROUP_CONCAT(p.efternamn) as enamn
FROM bilder 
AS b
INNER JOIN k_pers_bild 
as kpb ON kpb.bildid b.id
INNER JOIN personer 
as p ON kpb.personid p.id) as tbl1
INNER JOIN
(
SELECT bildnrGROUP_CONCAT(n.ord) as keyword
FROM bilder 
as b
INNER JOIN k_nyckelord_bild 
AS k_nb ON k_nb.bildid b.id
INNER JOIN nyckelord 
AS n ON n.id k_nb.ordid) as tbl2 ON tbl1.bildnr tbl2.bildnr 

Funkar den?
Citera
2013-12-20, 21:27
  #6
Medlem
atitaranta-s avatar
Citat:
Ursprungligen postat av Proton
Du har ju två set innehållandes den data du vill ha, dessutom har du ju ett bildid som minsta gemensamma nämnare för dessa set. Kan du inte bara joina ihop dem rätt upp och ner?

Kod:
SELECT bildnrtbl1.enamntbl2.keyword 
FROM
(
SELECT bildnrGROUP_CONCAT(p.efternamn) as enamn
FROM bilder 
AS b
INNER JOIN k_pers_bild 
as kpb ON kpb.bildid b.id
INNER JOIN personer 
as p ON kpb.personid p.id) as tbl1
INNER JOIN
(
SELECT bildnrGROUP_CONCAT(n.ord) as keyword
FROM bilder 
as b
INNER JOIN k_nyckelord_bild 
AS k_nb ON k_nb.bildid b.id
INNER JOIN nyckelord 
AS n ON n.id k_nb.ordid) as tbl2 ON tbl1.bildnr tbl2.bildnr 

Funkar den?

Tack, men nej. Dels är bildnr tvetydigt, men även om jag preciserar det ger queryn inga träffar.
Citera
2013-12-20, 21:54
  #7
Medlem
atitaranta-s avatar
Citat:
Ursprungligen postat av atitaranta-
Tack, men nej. Dels är bildnr tvetydigt, men även om jag preciserar det ger queryn inga träffar.
Eller jo, om jag lägger in WHERE-satsen på båda ställena.
Tack!
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