Çoklu filtreleme mysql sorgusu
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+')
)
)
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (1)
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);