【问题标题】:Query manipulation database查询操作数据库
【发布时间】:2013-11-23 09:24:34
【问题描述】:

我正在使用一些过滤器来显示产品。颜色、价格等过滤器。

链接: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";

现在的问题是,即使所有查询都不满足,我也想显示结果。如果只有几个选项匹配,我想在此基础上显示结果。

感谢您的帮助。

【问题讨论】:

  • 那么你想要“或”,而不是“和”。替换它,你应该会很好。

标签: php mysql sql database resultset


【解决方案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";

【讨论】:

    【解决方案2】:

    试试这样的查询:

    $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 不返回任何内容,您将获得来自第二个软查询的数据。

    【讨论】:

      猜你喜欢
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 2019-09-11
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      相关资源
      最近更新 更多