Autor | Zpráva | ||
---|---|---|---|
SteveO Profil * |
#1 · Zasláno: 14. 11. 2013, 20:56:39
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 |
#2 · Zasláno: 14. 11. 2013, 21:14:58
|
||
SteveO Profil * |
#3 · Zasláno: 14. 11. 2013, 22:15:39
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 |
#4 · Zasláno: 14. 11. 2013, 22:36:20
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 * |
#5 · Zasláno: 14. 11. 2013, 22:48:55 · Upravil/a: SteveO
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') (ph.id_parametr = '83' AND SUBSTRING_INDEX(SUBSTRING_INDEX(ph.hodnota, 'max. ', -1), '-', -1) < '35') |
||
Kajman Profil |
#6 · Zasláno: 14. 11. 2013, 22:59:44
... 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 * |
#7 · Zasláno: 14. 11. 2013, 23:01:34 · Upravil/a: SteveO
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. |
||
Časová prodleva: 10 let
|
0