mysql - SQL产品过滤器

标签 mysql sql zend-db

我有两个表:

  1. sklep_produkty:id |姓名

  2. sklep_atr_prod:id | id_产品 |亚特|值(value)

atr_prod table

在网址中我使用 ?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 BYHAVING来做到这一点:

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/

相关文章:

php - 学说 2 : Getting records based on at least one record with a specific attribute?

mysql - 除以第二个查询

c# - 无效的对象名称 SQL 选择

php - Zend Db 使用 COLLATE 时出现非法排序规则和语法错误混合

mysql - Magento 产品标题 char_length 限制

php - 数据表警告(表 ID = 'My Table'): Requested unknown parameter '0' from the data source

MySQL Workbench 管理服务器实例

PHP行删除

php - 准备好的语句mysqli不返回行

zend-framework - [zend][db] fetchAll 有多个变量