SQL-在表中显示查询数据并在屏幕上按列排序

时间:2019-07-03 11:57:32

标签: php mysql sql

我的数据库中有一个巨大的表,我希望能够显示内容并按某些列对其进行过滤。

为此,我选择一个重新加载页面的过滤器,并使用新条件和新参数重写sql查询,如下所示:

$params = [];
$sql = "SELECT * FROM pricing";
if((isset($filter1) && $filter1!="") || (isset($filter2) && $filter2!="") || (isset($filter3) && $filter3!="") || (isset($filter4) && $filter4!="")){
    $sql .= " WHERE ";
}
if(isset($filter1) && $filter1!=""){
    $sql .= "supplier=?";
    array_push($params,$filter1);
}
if((isset($filter1) && $filter1!="") && ((isset($filter2) && $filter2!="") || (isset($filter3) && $filter3!="") || (isset($filter4) && $filter4!=""))){
    $sql .= " AND ";
}
if(isset($filter2) && $filter2!=""){
    $params1 = [$filter2];
    $sql1 = "SELECT * FROM product_categories WHERE category_id=?";
    $stmt = DB::run($sql1,$params1);
    $count = $stmt->rowCount();
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
        $product_id = $row['product_id'];
        array_push($params,$product_id);
    }
    $sql .= "product=?";
    for($i=1; $i<$count; $i++){
        $sql .= " OR product=?";
    }
}
if((isset($filter2) && $filter2!="") && ((isset($filter3) && $filter3!="") || (isset($filter4) && $filter4!=""))){
    $sql .= " AND ";
}
if(isset($filter3) && $filter3!=""){
    $params1 = ['%'.$filter3.'%'];
    $sql1 = "SELECT * FROM products WHERE product_name LIKE ? LIMIT 50";
    $stmt1 = DB::run($sql1,$params1);
    $count = $stmt1->rowCount();
    while($row = $stmt1->fetch(PDO::FETCH_ASSOC)){
        $product_id = $row['id'];
        array_push($params,$product_id);
    }
    $sql .= "product=?";
    for($i=1; $i<$count; $i++){
        $sql .= " OR product=?";
    }
}
if((isset($filter3) && $filter3!="") && (isset($filter4) && $filter4!="")){
    $sql .= " AND ";
}
if(isset($filter4) && $filter4!=""){
    $sql .= "model_no LIKE ?";
    array_push($params,'%'.$filter4.'%');
}

但是,这变得非常复杂,我想添加更多的过滤器,但不一定效果最好。

在屏幕上对表格进行排序是否有更好的选择?我不是在寻找解决方案,只是朝着正确方向的一个点很不错,我已经寻找了一段时间,但没有找到我想要的东西。

0 个答案:

没有答案