Autor Zpráva
Monkeys
Profil *
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 *
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.

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: