我的数据库中有一个巨大的表,我希望能够显示内容并按某些列对其进行过滤。
为此,我选择一个重新加载页面的过滤器,并使用新条件和新参数重写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.'%');
}
但是,这变得非常复杂,我想添加更多的过滤器,但不一定效果最好。
在屏幕上对表格进行排序是否有更好的选择?我不是在寻找解决方案,只是朝着正确方向的一个点很不错,我已经寻找了一段时间,但没有找到我想要的东西。