[MEGOLDVA] Cikkek szűrése szerző alapján

Sziasztok!

Van egy cikkek táblám, a cikkeknek pedig vannak szerzőik. Egy cikknek több szerzője is lehet, tehát ez egy a többhöz kapcsolat, ezért van egy szerzők táblám, a kettő között pedig egy relációs tábla. Lásd mintaadat:

http://hup.pastebin.com/p3nErbr6

Szeretném a "Masodik Szerzo"-höz tartozó cikkeket kilistázni a szerzők neveivel. Ha a következőt teszem, akkor valóban csak a szerző által írt cikkek jelennek meg, de a cikk két szerzője közül csak az jelenik meg, akire a keresés irányult:

SELECT cikkek.*, GROUP_CONCAT(DISTINCT szerzok.nev SEPARATOR ", ") AS 'szerzok' FROM cikkek LEFT JOIN relacio USING (cikk_id) LEFT JOIN szerzok USING (szerzo_id) WHERE szerzok.nev = 'Masodik Szerzo' GROUP BY cikkek.cikk_id;

Hogyan tudnám megoldani, hogy a cikk összes szerzője megjelenjen?

Két megjegyzés:
- A lekérdezés fő táblájának a 'cikkek'-nek kell lennie.
- Szerzőt id és név alapján is lehet szűrni az alkalmazásban.

Előre is köszönöm a segítséget!

Hozzászólások

Jobb ötlet híján subquery lett belőle, így működik:

SELECT cikkek.*, GROUP_CONCAT(DISTINCT szerzok.nev SEPARATOR ", ") AS 'szerzok' FROM cikkek LEFT JOIN relacio USING (cikk_id) LEFT JOIN szerzok USING (szerzo_id) WHERE cikkek.cikk_id IN (SELECT cikkek.cikk_id FROM cikkek LEFT JOIN relacio USING (cikk_id) LEFT JOIN szerzok USING (szerzo_id) WHERE szerzok.nev = 'Masodik Szerzo') GROUP BY cikkek.cikk_id

Én két részre bontanám a feladatot:

(1) A megadott szerző által írt cikkek
(2) Cikkek és hozzátartozó szerzők listázása cikk_id alapján

(1)


SELECT relacio.cikk_id 
FROM szerzok, relacio 
WHERE szerzok.szerzo_id = relacio.szerzo_id AND relacio.szerzo_id = 2;

(2)


SELECT cikkek.title, szerzok.nev 
FROM cikkek, relacio, szerzok 
WHERE cikkek.cikk_id = relacio.cikk_id AND szerzok.szerzo_id = relacio.szerzo_id 
AND relacio.cikk_id in (1,2);

Az (1,2) helyébe behelyettesíthető az első lekérdezés

A GROUP_CONCAT csak 1024 bájtig ír ki!!!

Ez tulajdonképpen ugyanaz, mint a subquerys megoldás, azzal a különbséggel hogy a subquery itt külön lekérdezés. Azért majd tesztelni fogom hogy melyik gyorsabb, subquery, vagy két külön query. A GROUP_CONCAT maximális mérete valóban könnyen állítható, de nem hiszem hogy szükség lesz rá. 1024 karakter az durván minimum 10 szerző, a cikkek többségének pedig kevesebb mint 5 szerzője van.