Zadejte hledaný výraz...

Vyber dat pres spojovaci tabulku

since
verified
rating uzivatele
15. 7. 2011 16:40:53
Ahoj,
Používám databázi Mysql, mám v ní tabulky Clanek, Kategorie, Clanek_Kategorie (spojovací). Každej článek může mít několik kategorií.
Snažím se to zapsat nějakým způsobem zapsat do jednoho dotazu místo abych dělal psí kusy v PHP.
Ale nějak tomu nemůžu přijít na kloub.
Spojovací tabulka vypadá asi tak:
clanek_id | kategorie_id
1 | 2
1 | 3
1 | 5
2 | 2
3 | 5
3 | 2
pokud napisu tento dotaz:
Výpis vypadá asi nějak tak:
1 | Ahoj svete | Životní styl
1 | Ahoj svete | Osobní
1 | Ahoj svete | Komedie
Ale potřebuju dosáhnout toho, aby výsledek vypadal takto:
1 | Ahoj svete | Životní styl, osobní, komedie
Zároveň ale potřebuji abz se zobrazily i články, které nejsou ve spojovací tabulce... zkrátka všechny.
Možná je to komplikované řešení, jsem tak trochu nahranej. Jde jen o přiřazování kategorií k článku.
Ale řešení, že bych u každého článku měl sloupec "kategorie_id" a bylo to tam zapsané asi tak "2,3,5" je asi ještě horší než spojovací tabulkou.
Je to možné udělat přímo v jednom mysql dotazu?
Příjmu i jiné řešení.
Díky
15. 7. 2011 16:40:53
https://webtrh.cz/diskuse/vyber-dat-pres-spojovaci-tabulku#reply655910
lidoop
verified
rating uzivatele
(7 hodnocení)
15. 7. 2011 17:02:54
Mam pocit ze relacni algebra Ti takovou operaci neumoznuje. Pro tyto pripady je obecne k dispozici mechanismus Stored Procedure; nespecifikujes ale kterou DB pouzivas tudiz Ti k tomu nic blizsiho nemuzu rict.
15. 7. 2011 17:02:54
https://webtrh.cz/diskuse/vyber-dat-pres-spojovaci-tabulku#reply655909
since
verified
rating uzivatele
15. 7. 2011 17:08:12
Napsal lidoop;677484
Mam pocit ze relacni algebra Ti takovou operaci neumoznuje. Pro tyto pripady je obecne k dispozici mechanismus Stored Procedure; nespecifikujes ale kterou DB pouzivas tudiz Ti k tomu nic blizsiho nemuzu rict.
Zapoměl jsem, opraveno.
Používám MYSQL.
Pokud takovou operaci neumožňuje, tak jak to udělat lépe? například vybrat 3 tabulky a pak je spojit až v PHP ve výpisu? Nebo raději u každého článku mít sloupec "kategorie_id" a mít tam několik ID kategorií a bez spojovací tabulky? TTo řešení je jednoduší ale asi je to prasečina.
15. 7. 2011 17:08:12
https://webtrh.cz/diskuse/vyber-dat-pres-spojovaci-tabulku#reply655908
txr
verified
rating uzivatele
15. 7. 2011 17:19:41
toto by mohlo fungovat:
15. 7. 2011 17:19:41
https://webtrh.cz/diskuse/vyber-dat-pres-spojovaci-tabulku#reply655907
sysline
verified
rating uzivatele
(2 hodnocení)
15. 7. 2011 17:29:55
jina varianta :)
SELECT clanek.id, clanek.nazev,
(SELECT GROUP_CONCAT(nazev) FROM kategorie AS k JOIN clanek_kategorie AS ck ON k.id=ck.kategorie_id WHERE ck.clanek_id=clanek.id ) AS kategorie_nazev
FROM `clanek` WHERE clanek.status = "1"
ORDER BY clanek.datum DESC
15. 7. 2011 17:29:55
https://webtrh.cz/diskuse/vyber-dat-pres-spojovaci-tabulku#reply655906
since
verified
rating uzivatele
15. 7. 2011 17:41:33
Díky oboum. Teď která varianta je rychlejší na vykonání? :) Verzi od txr jsem odzkoušel a funguje...
15. 7. 2011 17:41:33
https://webtrh.cz/diskuse/vyber-dat-pres-spojovaci-tabulku#reply655905
sysline
verified
rating uzivatele
(2 hodnocení)
15. 7. 2011 18:04:01
Napsal since;677501
Díky oboum. Teď která varianta je rychlejší na vykonání? :) Verzi od txr jsem odzkoušel a funguje...
Na to se jednoznacne neda odpovedet, zalezi to na mnoha faktorech. Obecne se da rict, ze to vyjde relativne dost na stejno.
Jedinej rozdil je v tom, ze moje reseni je asi o neco jednodussi pro tento konkretni priklad. Kolegovo reseni, je lepe navrzene z obecneho hlediska a budouci pripadne rozsiritelnosti ci upravy.
15. 7. 2011 18:04:01
https://webtrh.cz/diskuse/vyber-dat-pres-spojovaci-tabulku#reply655904
Pro odpověď se přihlašte.
Přihlásit