首页 > 解决方案 > 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.'%');
}

但是,我想添加的过滤器越多,这就越复杂,而且不一定效果最好。

在屏幕上对表格进行排序有更好的选择吗?我不是在寻找解决方案,只是朝着正确的方向前进会很棒,我一直在寻找一段时间,但没有找到我想要的东西。

标签: phpmysqlsql

解决方案


推荐阅读