2017-08-04 7 views
0

J'ai deux tables:SQLproducts filtre

  1. sklep_produkty: id | nom

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

atr_prod table

En url j'utilise fq = couleur ('Czerwony'), pour obtenir la valeur i Utilisez le code:

$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]); 
} 

Puis-je obtenir id_prod comme ceci:

$filterActionQuery = $db->select()->from('sklep_atr_prod', array('id_prod', 'wartosc')); 

foreach($myArray as $parames){ 
    $filterActionQuery->where('wartosc = ?', $parames); 
} 
$filterActionresult = $db->fetchAll($filterActionQuery); 

requête SQL:

SELECT `sklep_atr_prod`.`id_prod`, 
`sklep_atr_prod`.`wartosc` 
FROM `sklep_atr_prod` 
WHERE (wartosc = 'Czerwony') 

Résultat:

Array 
(
    [0] => stdClass Object 
     (
      [id_prod] => 1 
      [wartosc] => Czerwony 
     ) 

    [1] => stdClass Object 
     (
      [id_prod] => 3 
      [wartosc] => Czerwony 
     ) 

) 

Et cela est ok, mais quand voulez utiliser antother filtr "size" Je fais URL comme ceci: fq = couleur ('Czerwony'), la taille ('XL')

SQL résultat:

SELECT 
`sklep_atr_prod`.`id_prod`, 
`sklep_atr_prod`.`wartosc` 
FROM `sklep_atr_prod` 
WHERE (wartosc = 'Czerwony') AND (wartosc = 'XL') 

Et cela me donne aucun résultat. Comment faire requête SQL en utilisant deux parametrs de la Czerwony »et 'XL' pour obtenir id_prod = 3.

+0

fq = couleur ('Czerwony') et la taille ('XL') – scaisEdge

Répondre

0

Vous pouvez le faire en utilisant GROUP BY et 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

Ce "2" signifie deux paramètres? Donc, je dois compter combien de mon URL ont des paramètres? – Kurczakovsky

+0

@Kurczakovsky. . . Oui, le "2" est pour les deux paramètres. –