Оператор выбора php зависит от существующих переменных - PullRequest
0 голосов
/ 02 июня 2011

Я пытаюсь настроить систему фильтров для небольшого магазина, который я разрабатываю.По сути, я работаю с результатами из списка переменных.На странице products.php, если нет строки запроса, будут показаны все продукты.Однако, если присутствует переменная, я хочу, чтобы она изменила оператор выбора там, где это необходимо.

Однако у меня возникают проблемы с фильтрацией.Если я использую оператор AND для всех переменных, он не фильтруется должным образом, равно как и OR.Так что, если бы я хотел черные ботинки 5-го размера, они бы показывали все пятые размеры независимо от цвета.

Есть ли лучший подход, чтобы принять это, как стать старым добрым старым царапателем!

if ($queryString == NULL){
    $query = "SELECT * FROM store_products 
JOIN store_cat on store_products.cat=store_cat.cat_id 
JOIN prod_sizes on store_products.prod_id=prod_sizes.product_id
JOIN prod_color on store_products.prod_id=prod_color.product_id 
GROUP BY store_products.prod_id";   
}else{
        $query = "SELECT * FROM store_products 
JOIN store_cat on store_products.cat=store_cat.cat_id 
JOIN prod_sizes on store_products.prod_id=prod_sizes.product_id
JOIN prod_color on store_products.prod_id=prod_color.product_id 
where store_products.sale='$sale' OR prod_color.color='$color' OR prod_sizes.size='$size' OR store_products.cat='$cat' GROUP BY store_products.prod_id";
}

пример переменной строки

products.php?sale=&cat_id=1&size=&color=Yellow

Ответы [ 2 ]

0 голосов
/ 02 июня 2011

Попробуйте создать критерии WHERE перед выполнением запроса.

Строка:
products.php?sale=&cat_id=1&size=&color=Yellow

myfile.php

$criteria = "WHERE 1 ";

if (isset($_GET['sale']) {
    $criteria .= "AND tore_products.sale=$_GET['sale'] ";
}
if (isset($_GET['cat_id']) {
    $criteria .= "AND store_products.cat=$_GET['cat_id'] ";
}
if (isset($_GET['color']) {
    $criteria .= "AND tore_products.color=$_GET['color'] ";
}

И так далее, затем выполнитеВаш запрос:

$query = "SELECT * FROM store_products 
JOIN store_cat on store_products.cat=store_cat.cat_id 
JOIN prod_sizes on store_products.prod_id=prod_sizes.product_id
JOIN prod_color on store_products.prod_id=prod_color.product_id
$criteria
GROUP BY store_products.prod_id";

И, пожалуйста, не забудьте очистить переменные $ _GET, прежде чем запрашивать их , используя mysql_real_escape_string, mysqli или PDO!

0 голосов
/ 02 июня 2011
$query = "SELECT * FROM store_products 
    JOIN store_cat on store_products.cat=store_cat.cat_id 
    JOIN prod_sizes on store_products.prod_id=prod_sizes.product_id
    JOIN prod_color on store_products.prod_id=prod_color.product_id ";

if {$queryString != NULL){
$query .= " WHERE tore_products.sale='$sale' OR prod_color.color='$color' OR prod_sizes.size='$size' OR store_products.cat='$cat'"
}
$query .=" GROUP BY store_products.prod_id;"

Затем вы выполняете ваш запрос:)

...