我有两个表:
sklep_produkty:id |姓名
sklep_atr_prod:id | id_产品 |亚特|值(value)
在网址中我使用 ?fq=color('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 fitr“size”时,我会创建这样的URL:?fq=color('Czerwony'),size('XL')
SQL 结果:
SELECT
`sklep_atr_prod`.`id_prod`,
`sklep_atr_prod`.`wartosc`
FROM `sklep_atr_prod`
WHERE (wartosc = 'Czerwony') AND (wartosc = 'XL')
这给了我空结果。如何使用两个参数“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;
关于mysql - SQL产品过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45504904/