Autor Zpráva
Meldo
Profil
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
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
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
Díky. Pomohlo moc!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0