Autor | Zpráva | ||
---|---|---|---|
Meldo Profil |
#1 · Zasláno: 14. 10. 2013, 15:25:12
Ahoj,
ako nastavit radenie tabulky podla vysledku z inej tabulky? Mam tabulku produkty a tabulku objednane produkty. Chcel by som vypisat tabulku produkty zoradenu podla mnozstva objednanych kusov, ktore dostanem ako SUM(id_produktu) z tabulky objednane_produkty. Mam takyto SQL: SELECT * FROM produkty WHERE (kategoria REGEXP ',15,' OR kategoria REGEXP '^15,' OR kategoria REGEXP ',15$' OR kategoria REGEXP '^15$') and (zobrazit = 1 and zmazane = 1) ORDER BY skladom DESC, ****** id DESC LIMIT 0, 16 Na miesto kde su ****** by som potreboval dostat nieco taketo: (SELECT id_produktu FROM eshop_objednavky_produkty GROUP BY id_produktu ORDER BY SUM(mnozstvo) DESC) DESC Ako to spojit. |
||
Tori Profil |
#2 · Zasláno: 14. 10. 2013, 15:48:03
Chyba návrhu: Některé časteji řešené dotazy pro MySQL - FAQ » Více hodnot ve sloupci
Jinak asi něco takového: SELECT p.*, SUM(IFNULL(o.mnozstvo, 0)) celkem FROM produkty p LEFT JOIN eshop_objednavky_produkty o USING (id_produktu) WHERE (kategoria REGEXP ',15,' OR kategoria REGEXP '^15,' OR kategoria REGEXP ',15$' OR kategoria REGEXP '^15$') and (zobrazit = 1 and zmazane = 1) GROUP BY p.id_produktu ORDER BY p.skladom DESC, celkem DESC LIMIT 0, 16 |
||
Kajman Profil |
#3 · Zasláno: 14. 10. 2013, 15:53:23
Případně připojit již vysčítané věci. Těžko říci, co bude rychlejší.
SELECT p.* FROM produkty p LEFT JOIN (SELECT id_produktu, Sum(mnozstvo) soucet FROM eshop_objednavky_produkty GROUP BY id_produktu) s ON p.id = s.id_produktu WHERE Find_in_set(15, kategoria) AND zobrazit = 1 AND zmazane = 0 ORDER BY skladom DESC, s.soucet DESC, id DESC LIMIT 0, 16 K výtce za špatně ukládanou kategorii se přidávám. |
||
Meldo Profil |
#4 · Zasláno: 14. 10. 2013, 16:47:28
Díky. Pomohlo moc!
|
||
Časová prodleva: 11 let
|
0