Autor | Zpráva | ||
---|---|---|---|
Monkeys Profil * |
#1 · Zasláno: 22. 4. 2015, 22:06:11
Trochu sa chcem zbavit podmienok v php a skusam to cez podmienky v MySQL, no hadze mi to chybu od riadku FROM
Princip je ak existuje id_produktu vrat produkt, inac vrat najmensie id_produktu v tabulke. $sql = "SELECT p.id_produktu, p.id_kategorie, p.uni_kod, p.produkt, p.url_produktu, p.popis, REPLACE(p.cena, '.',',') AS predajna_cena, REPLACE(p.cena_dph, '.',',') AS cena_dph, pg.obrazok AS image, pg.title, pg.alt, k.kategoria FROM (CASE WHEN EXISTS( SELECT id_produktu FROM produkty WHERE id_produktu={$id} ) THEN ( SELECT produkty.* FROM produkty WHERE priznaky = 'open' AND id_produktu={$id} ) END) AS p INNER JOIN kategorie k USING(id_kategorie) INNER JOIN produkt_gallery pg USING(id_produktu)"; |
||
juriad Profil |
Monkeys:
Jdeš na to úplně špatně. Do klauzule FROM rozhodně podmínky nepatří, ty patří do části SELECT. Lépe je položit dotaz, který vybere obě možnosti a omezit počet výsledků na jeden: SELECT p.id_produktu, p.id_kategorie, p.uni_kod, p.produkt, p.url_produktu, p.popis, REPLACE(p.cena, '.',',') AS predajna_cena, REPLACE(p.cena_dph, '.',',') AS cena_dph, pg.obrazok AS image, pg.title, pg.alt, k.kategoria FROM produkty p INNER JOIN kategorie k USING(id_kategorie) INNER JOIN produkt_gallery pg USING(id_produktu) CROSS JOIN (SELECT MIN(id_produktu) minimum FROM produkty WHERE priznaky = 'open') m WHERE p.priznaky = 'open' AND (id_produktu = {$id} OR id_produktu = m.minimum) ORDER BY id_produktu DESC LIMIT 1 Opravdu si myslíš, že je dobrý nápad konvertovat desetinné tečky na čárky v SQL? To s nimi nebudeš nikdy chtít v PHP pracovat jako s čísly? |
||
Monkeys Profil * |
#3 · Zasláno: 22. 4. 2015, 22:40:05
Tak som to vyriesil takto:
SELECT p.id_produktu, p.id_kategorie, p.uni_kod, p.produkt, p.url_produktu, p.popis, REPLACE(p.cena, '.',',') AS predajna_cena, REPLACE(p.cena_dph, '.',',') AS cena_dph, pg.obrazok AS image, pg.title, pg.alt, k.kategoria FROM produkty p LEFT JOIN kategorie k USING(id_kategorie) LEFT JOIN produkt_gallery pg USING(id_produktu) WHERE p.priznaky='open' AND p.id_produktu = (CASE WHEN EXISTS(SELECT id_produktu FROM produkty WHERE id_produktu={$id}) THEN {$id} ELSE (SELECT MIN(id_produktu) FROM produkty) END) juriad: „To s nimi nebudeš nikdy chtít v PHP pracovat jako s čísly?“ Nie je to klasicky eshop cisla len vypisujem ako textovy retazec takze ich ako cisla uz nepotrebujem. M. |
||
Časová prodleva: 9 let
|
0