2017-08-04 87 views
0

我有两个表:SQLproducts过滤

  1. sklep_produkty:ID |

  2. sklep_atr_prod:id | id_prod | atr | ?值

atr_prod table

在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

+0

FQ =颜色( 'Czerwony')的尺寸( 'XL') – scaisEdge

回答

0

可以使用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; 
+0

这个“2”是指两个参数?所以我必须指出我的网址有多少个参数? – Kurczakovsky

+0

@Kurczakovsky。 。 。是的,“2”用于两个参数。 –