Autor | Zpráva | ||
---|---|---|---|
lukasMK Profil * |
#1 · Zasláno: 3. 10. 2012, 10:19:14
Pěkný den všem. Trápím se s mysql dotazem a prosím o pomoc. Mám dvě tabulky:
tabulka page id | menu ----------------------------- 5 | 3 4 | 3 8 | 2 tabulka product_pages product_id | page_id ----------------------------- 2500 | 5 2500 | 4 2400 | 8 page.id = product_pages.page_id Potřebuji zobrazit product_id všech záznamů, které patří do více než jedné stránky, u které platí menu = 3. Nevím si s tím rady, pořád to nedělá to co chci. Prosím o pomoc. |
||
Tori Profil |
#2 · Zasláno: 3. 10. 2012, 11:55:42
Asi takhle?
SELECT product_id FROM product_pages d INNER JOIN page p ON d.page_id = p.id WHERE p.menu = 3 GROUP BY product_id HAVING COUNT(product_id) > 1 |
||
lukasMK Profil * |
#3 · Zasláno: 3. 10. 2012, 12:22:42
Děkuji to je ono.
|
||
Časová prodleva: 7 dní
|
|||
lukasMK Profil * |
#4 · Zasláno: 10. 10. 2012, 19:20:20
Ještě jsem se snažil vytvoři podobný dotaz, kdy mi to zobrazí page.name u případů, kdy do stránky nepatří ani jeden produkt:
SELECT name FROM page d INNER JOIN product_pages p ON d.id = p.page_id WHERE d.menu =3 GROUP BY name HAVING COUNT( page_id ) <1 Tohle ale nefunguje, někam mi asi nedochází jak to má vlastne fungovat. Vybírám name z tabulky page, připojuji tabulku product_pages. Spojuji id z tabulky page s product_id z tabulky product_pages. Seřazuji podle názvu a vybírám count u page_id. Samozřejmě tam je chyba, ale nevím kde. |
||
Tori Profil |
#5 · Zasláno: 10. 10. 2012, 20:06:57
lukasMK:
„Vybírám name z tabulky page, připojuji tabulku product_pages“ a připojujete ji pomocí INNER JOIN, tzn. ve výsledku budou jen řádky, které existují v obou tabulkách. Při použití LEFT JOIN dostanete všechny odpovídající řádky z tabulky page a pokud nebude nalezen příslušný řádek z druhé tab., bude v sloupcích z druhé tabulky NULL. Tady bude vhodnější jiný dotaz: SELECT id, name FROM page d WHERE NOT EXISTS (SELECT * FROM product_pages p WHERE d.id = p.page_id) ORDER BY name |
||
lukasMK Profil * |
#6 · Zasláno: 10. 10. 2012, 20:57:05
Děkuji mnohokrát, tohle mě nenapadlo.
|
||
Kajman Profil |
#7 · Zasláno: 10. 10. 2012, 21:39:25
Při verzi s left joinem není potřeba group by a někdy to je rychlejší než not exists
SELECT name FROM page d LEFT JOIN product_pages p ON d.id = p.page_id WHERE d.menu =3 AND p.page_id IS NULL |
||
Tori Profil |
#8 · Zasláno: 10. 10. 2012, 22:01:40
Kajman:
Díky, to jsem si právě nebyla jistá, jak na tom jsou obě verze rychlostně. |
||
Kajman Profil |
#9 · Zasláno: 11. 10. 2012, 09:02:37
Asi budou většinou obdobně rychlé. Jen někdy může být jeden z přístupů rychlejší než druhý.
|
||
Časová prodleva: 12 let
|
0