【问题标题】:how to make sql filters efficient php如何使sql过滤器高效php
【发布时间】:2013-08-18 10:18:30
【问题描述】:

我有 4 个目录过滤器(名称、id、日期、价格)。这些是来自用户的输入,用于查看数据库中的特定数据。这 4 个过滤器将在 php 上产生 4^2 (16) 个 sql_queries,因为某些过滤器可能为空。有没有更好的方法来减少查询?

示例:

if(isset($_POST['filters']))
{
    $date = $_POST['date'];
    $timi = $_POST['timi'];
    $employee = $_POST['dropdown_users'];
    $proion =$_POST['dropdown_proionta'];
    $query = ("SELECT * FROM id_of_orders WHERE username='$employee' AND price = '$timi' AND time = '$date' AND proion='$proion'");
    $result=mysql_query($query);
    while($row= mysql_fetch_array($result))
    {
        echo $row['id_order'] . " " . $row['time'] . '<br>';
    }
}

【问题讨论】:

  • 您能否澄清一下您希望如何过滤数据?
  • 所以即使某些过滤器为空,我也想返回数据。
  • 该代码中只有一个查询,而不是 16 个。很难理解问题所在。
  • 如果所有过滤器都不为空,将使用此查询。例如,如果 $date 为空,我必须在没有 time ='$date' 的情况下进行另一个查询

标签: php mysql filter


【解决方案1】:

我认为您正在寻找这样的东西:

$query = "SELECT * FROM id_of_orders WHERE 1=1";
if(!empty($employee))
  $query .= " AND username='$employee'";
if(!empty($timi))
  $query .= " AND price='$timi'";
if(!empty($date))
  $query .= " AND time='$date'";
if(!empty($proion))
  $query .= " AND proion='$proion'";

这种方式不会为空过滤器添加查询条件,而输入的过滤器将用作结果的条件。

【讨论】:

    猜你喜欢
    • 2016-10-09
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多