v2.5.2
Giriş yap

Çoklu filtreleme mysql sorgusu

polev
586 defa görüntülendi

Div içerisinde ki seçilen özellikleri filtrelemek için aşağıda oluşan arrayı gönderiyorum.
Ancak array içerisinde aynı key olduğu için Mavi olan sorgu içerisinde oluşmuyor.
Hatam nerede?

$query = "SELECT DISTINCT products.* FROM products";
$arr = array("1" => "Mavi", "1" => "Pembe", "2" => "Kadın", "Yaş" => "3+");
$x = 1;
for ($x; $x <= count($arr); $x++) {
    $join = ' JOIN product_filters AS f' . $x . ' ON f' . $x . '.product_id = products.id ';
    $query .= $join;
}

foreach ($arr as $key => $value) {
    $val = "'" . $value . "'";
    $where = ' and ((f' . $x . '.attribute_id = ' . $key . ' AND f' . $x . '.filter_id=(' . $val . ') ';
    $query .= $where;
    $x++;
}
for ($x; $x - 3 <= count($arr); $x++) {
    $query .= ")";
}
$query .= "";
print_r($query);

Oluşturmak istediğim sorgu :

SELECT DISTINCT
  products.*
FROM
  products
JOIN
  product_filters AS f1
ON
  f1.product_id = products.id
JOIN
  product_filters AS f2
ON
  f2.product_id = products.id
JOIN
  product_filters AS f3
ON
  f3.product_id = products.id
WHERE
  (
    f1.attribute_id = 2 AND f1.filter_id IN('Kadın', 'Erkek')
  ) AND(
    (
      f2.attribute_id = 1 AND f2.filter_id IN('Mavi')
    ) AND(
      f3.attribute_id = 3 AND f3.filter_id IN('3+')
    )
  )
Cevap yaz
Cevaplar (1)
polev
1059 gün önce

Sorun çözüldü yapı aşağıda ki şekilde arayan arkadaşlara yardımcı olur umarım;

$query = "SELECT DISTINCT products.* FROM products";
$arr = array(
    0 =>
    array(
        'id' => '2',
        "filter" => array("Kadın", "Erkek")
    ),
    1 =>
    array(
        'id' => '1',
        "filter" => array("Pembe","Mavi")
    ),
    2 =>
    array(
        'id' => '3',
        "filter" => array("3+", "6+")
    )
);
for ($x = 1; $x <= count($arr); $x++) {
    $join = ' JOIN product_filters AS f' . $x . ' ON f' . $x . '.product_id = products.id ';
    $query .= $join;
}
$x = 1;
$query .= " WHERE ";
foreach ($arr as $key) {
    foreach ($key["filter"] as $value) {
        $val .= "'" . $value . "',";
    }
    $val = rtrim($val, ",");
    if ($x == 1) {
        $where = ' ((f' . $x . '.attribute_id = ' . $key["id"] . ' AND f' . $x . '.filter_id In (' . $val . ') ';
        $query .= $where;
    } else {
        $where = ' and ((f' . $x . '.attribute_id = ' . $key["id"] . ' AND f' . $x . '.filter_id In (' . $val . ') ';
        $query .= $where;
    }
    $val = "";
    $x++;
}
for ($x = 0; $x - (count($arr) - 1) <= count($arr); $x++) {
    $query .= ")";
}
print_r($query);