SQLproducts过滤
问题描述:
我有两个表:SQLproducts过滤
sklep_produkty:ID |
sklep_atr_prod:id | id_prod | atr | ?值
在URL我用FQ =颜色( 'Czerwony'),得到的值,我使用代码:
$fq = $this->getRequest()->getParam('fq');
$fq = explode(',', $fq);
$myArray = array();
foreach($fq as $param){
$literal_pattern = "/('[^']*')/";
$fq = preg_match($literal_pattern, $param, $token);
$myArray[] = str_replace("'", "", $token[0]);
}
然后我得到id_prod这样的:
$filterActionQuery = $db->select()->from('sklep_atr_prod', array('id_prod', 'wartosc'));
foreach($myArray as $parames){
$filterActionQuery->where('wartosc = ?', $parames);
}
$filterActionresult = $db->fetchAll($filterActionQuery);
SQL查询:
SELECT `sklep_atr_prod`.`id_prod`,
`sklep_atr_prod`.`wartosc`
FROM `sklep_atr_prod`
WHERE (wartosc = 'Czerwony')
结果:
Array
(
[0] => stdClass Object
(
[id_prod] => 1
[wartosc] => Czerwony
)
[1] => stdClass Object
(
[id_prod] => 3
[wartosc] => Czerwony
)
)
这是好的,但要使用antother FILTR “大小” 当我做出这样的URL:FQ =颜色( 'Czerwony'),大小( 'XL')
SQL结果:
SELECT
`sklep_atr_prod`.`id_prod`,
`sklep_atr_prod`.`wartosc`
FROM `sklep_atr_prod`
WHERE (wartosc = 'Czerwony') AND (wartosc = 'XL')
这给我空的结果。如何使用两个parametrs 'Czerwony' 和 'XL',以获得使SQL查询id_prod = 3
答
可以使用GROUP BY
和HAVING
做到这一点:?
SELECT sap.id_prod
FROM `sklep_atr_prod` sap
WHERE sap.wartosc IN ('Czerwony', 'XL')
GROUP BY sap.id_prod
HAVING COUNT(DISTINCT sap.wartosc) = 2;
+0
这个“2”是指两个参数?所以我必须指出我的网址有多少个参数? – Kurczakovsky
+0
@Kurczakovsky。 。 。是的,“2”用于两个参数。 –
FQ =颜色( 'Czerwony')的尺寸( 'XL') – scaisEdge