Autor Zpráva
SteveO
Profil *
Zdravím, potřeboval vypsat z DB data podle ID parametru a jeho hodnoty. Uživatel si může parametrů naklikat více najednou.

SELECT ... WHERE ... AND ((ph.id_parametr = '100' AND ph.hodnota = 'ano') OR (ph.id_parametr = '101' AND ph.hodnota = 'ano'))

Takto to funguje, ale samozřejmě dochází k tomu, že tím více parametrů naklikám, tím více výsledků dostanu, je tam prostě OR.

Potřeboval bych to tedy udělat nějak takto:

SELECT ... WHERE ... AND (ph.id_parametr = '100' AND ph.hodnota = 'ano') AND (ph.id_parametr = '101' AND ph.hodnota = 'ano')

Takto ale dotaz nevrátí nic (i když oba parametry u daného produktu přiřazené jsou). Můžete mi prosím někdo poradit, jak na to? Díky moc.
Kajman
Profil
Mysql dotaz odpovídající dvěma řádkům
SteveO
Profil *
Díky moc, ještě jeden problém, následující dotaz má spočítat počet výsledků, ale vrací vždycky jedničku:

SELECT COUNT(DISTINCT p.product_id) AS total FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) LEFT JOIN parametr_hodnota ph ON (p.product_id = ph.id_product) WHERE pd.language_id = '2' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND (ph.id_parametr, ph.hodnota) IN (('100', 'ano')) AND p2c.category_id = '20' GROU BY p.product_id HAVING COUNT(DISTINCT ph.id_parametr, ph.hodnota) = 1
Kajman
Profil
Asi to vrátí více řádků s jedničkou.

Zkuste
select count(*) from (select p.product_id ... group by p.product_id having ...) t
SteveO
Profil *
Jste genius, díky :)


Ještě prosím jedna věc, je možné použít v rámci IN nějak porovnávací operátory?
Resp. dostat tam nějak toto:
(ph.id_parametr = '114' AND ph.hodnota IS NOT NULL AND ph.hodnota != 'ne')
Nebo dokonce toto:
(ph.id_parametr = '83' AND SUBSTRING_INDEX(SUBSTRING_INDEX(ph.hodnota, 'max. ', -1), '-', -1) < '35')
Kajman
Profil
...
AND (    (ph.id_parametr = '100' AND ph.hodnota ='ano') 
      OR (ph.id_parametr = '114' AND ph.hodnota IS NOT NULL AND ph.hodnota != 'ne')
      OR (ph.id_parametr = '83' AND SUBSTRING_INDEX(SUBSTRING_INDEX(ph.hodnota, 'max. ', -1), '-', -1) < '35')
    )
...
HAVING COUNT(DISTINCT ph.id_parametr)=3
SteveO
Profil *
A více (ph.id_parametr = '100' AND ph.hodnota ='ano') sdružit normálně do IN?


Jasný, mám to, díky moc, snad už nebudu muset otravovat.

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