

Ako na zlozity dotaz [MySQL]
Dobry den vospolok,
zatuhol som pri rieseni jedneho MySQL dotazu s poddotazmi, moze mi s tym niekto pomoct? Ide o to, ze mam 3 tabulky:
A teraz otazka: Potrebujem spojit tieto 3 tabulky tak, ze vypisem vsetky veci, ich mena, kategorie a priradim ku kazdej veci obrazok. Kde je problem. Spojit tabulky veci a kategoria veci nie je problem na zaklade ID, obrazky by som priradoval tiez podla ID, avsak chcem ku kazdej veci vybrat len JEDEN obrazok a v tabulke obrazky veci sa nachadza hned niekolko obrazkov k jednej veci, preto vypise tu istu vec vo vratenom query ako viac poloziek, riadkov. Ako obmedzit nacitanie obrazkov na jeden jediny? Skusal som rozne operatory a poddotazy, ale nic sa mi nedarilo. Zrejme je to trivialita, ale neviem prist veci na klb.
Vdaka za akekolvek nakopnutie.
Možná jsem to správně nepochopil, ale nestačilo by použít jen SELECT DISTINCT?
SELECT DISTINCT nepoznam, uz hladam.
Prezrel som si tu fciu, ale nepomaha mi. Bud je nevhodna, alebo ju nepouzivam spravne.
Na konec dotazu dopis "LIMIT 1".
V tom pripade mi predsa vypise len jednu jedinu vec, nie zoznam veci.
S tím DISTINCT to asi nepůjde. Ale napadlo mě, si udělat pohled na tabulku obrazky pomocí
a pak v tom dalším selectu vybírat z toho pohledu.
SELECT v.jmeno, k.kategorie, o.obr FROM veci v JOIN kategorie k ON v.kategorie = k.id, obrazky o WHERE o.id = (SELECT id FROM obrazky WHERE id_vec = v.id LIMIT 1)
Dakujem, overim. Mozem sa spytat, co znamena zapis:
a
? To priradujete alias "o" tabulke "obrazky"?
urobis si VIEW
CREATE VIEW NAZOV
AS
SELECT VEC_ID, MAX(OBRAZOK)
FROM OBRAZKY
GROUP BY VEC_ID
a potom uz budes mat len jeden obrazok pre kazdu vec
-- inak je to dost odveci otazka, kedze si ani nepovedal, ktory obrazok presne chces.
Nie, odveci to teda nie je.
BTW. je mi jedno, ktory obrazok to je, mne ide skor o zapis dotazu, potom si to uz zoradim, vytriedim, ktory obrazok konkretne chcem.
select k.*, v.*, (select distinct Veci_Id, Obrazok from Obrazky_veci) O from Kategoria k, Veci v where v.Kat = k.id and v.id = O.Veci_id
Ide o dosť bežný problém, riešení je na webe veľa. Ak nechceš použiť view, tak si môžeš prečítať napríklad How to select the first/least/max row per group in SQL.
Dakujem vsetkym zucasnenym za rady, vsetky boli podnetne. Vidiet, ze ste profici. Zo vsetkych rad som sa co-to naucil.
Problem som vyriesil prostym LEFT JOIN-om, kde som sa vyhral trochu s klauzulami WHERE a pod.
Este raz dakujem a znacim ako vyriesene.