2013-11-23 4 views
0

Я использую некоторые фильтры для отображения продуктов. Фильтры, такие как цвета, цена и прочее.База данных обработки запросов

Ссылка: http://www.applechain.com/products/iPod.php

Я использую этот запрос,

$sql = "Select * 
    from tbl_product 
    where device='iPhone' 
    and (color='$c1' 
     or color='$c2'  
     or color='$c3'  
     or color='$c4'  
     or color='$c5'  
     or color='$c6'  
     or color='$c7'  
     or color='$c8'  
     or color='$c9'  
     or color='$c10' 
    ) and (storage='$cp1'  
     or storage='$cp2'  
     or storage='$cp3'  
     or storage='$cp4'  
     or storage='$cp5' 
    ) and (f_unlock='$factory')  
    and (warranty='$warranty')  
    and (price >= '$price1'  
     and price <= '$price2' 
    ) 
    order by product_id desc"; 

Теперь дело в том, что я хочу, чтобы показать результат, даже если все запросы не удовлетворены. Как насчет того, будет ли только пара параметров сопоставлена, и я хочу отображать результаты на основе этого.

Буду признателен за помощь.

+0

Тогда вы хотите «или», а не «и». Замените это, и вы должны быть хорошими. –

ответ

0

Try что-то вроде этого запроса:

$sql = " 
    SELECT 
     *, 
     1 as order_prority 
    FROM tbl_product 
    WHERE 
     device = 'iPhone' 
     AND color IN ('$c1', '$c2', '$c3', '$c4', '$c5', 
      '$c6', '$c7', '$c8', '$c9', '$c10') 
     AND storage IN ('$cp1', '$cp2', '$cp3', '$cp4', '$cp5') 
     AND f_unlock = '$factory' 
     AND warranty = '$warranty' 
     AND (price BETWEEN '$price1' AND '$price2') 
    UNION SELECT 
     *, 
     2 
    FROM tbl_product 
    WHERE 
     device = 'iPhone' 
     AND (
      color IN ('$c1', '$c2', '$c3', '$c4', '$c5', 
         '$c6', '$c7', '$c8', '$c9', '$c10') 
      OR storage IN ('$cp1', '$cp2', '$cp3', '$cp4', '$cp5') 
      OR f_unlock = '$factory' 
      OR warranty = '$warranty' 
      OR (price BETWEEN '$price1' AND '$price2') 
     ) 
    ORDER BY order_prority ASC, product_id DESC 
"; 

Во всех случаях вы получите какой-то результат. Если первый SELECT (более строгий) возвращает что-то, данные будут содержать эти результаты в верхней части, а второй SELECT (более мягкий) будет в конце. Если первый SELECT ничего не вернет, вы получите данные из второго, мягкого запроса.

1
$sql = "SELECT *  
     FROM tbl_product 
     WHERE device = 'iPhone' 
     AND color IN ('$c1', '$c2', '$c3', '$c4', '$c5', 
      '$c6', '$c7', '$c8', '$c9', '$c10') 
     AND storage IN ('$cp1', '$cp2', '$cp3', '$cp4', '$cp5') 
     AND f_unlock = '$factory' 
     AND warranty = '$warranty' 
     AND ((price >= '$price1') AND (price <= '$price2')) 
     order by product_id desc"; 
Смежные вопросы