通过 Codeigniter 构建一个 MySql 查询,该查询在多个列中获取价格范围


Build a MySql query through Codeigniter that gets a price range in multiple columns

我有一张表格,显示有 4 种不同价格的房间,如下所示:

+----+--------+-----+-----+-----+-----+
| ID | Levels | p1  | p2  | p3  | p4  |
+----+--------+-----+-----+-----+-----+
| 1  | 5      | 100 | 90  | 200 | 500 |
+----+--------+-----+-----+-----+-----+
| 2  | 1      | 400 | 300 | 200 | 100 |
+----+--------+-----+-----+-----+-----+
| 3  | 3      | 80  | 140 | 130 | 210 |
+----+--------+-----+-----+-----+-----+
| 4  | 3      | 600 | 450 | 90  | 187 |
+----+--------+-----+-----+-----+-----+
| 5  | 2      | 580 | 300 | 50  | 40  |
+----+--------+-----+-----+-----+-----+

在前端,我有一个过滤器,它将参数发送到我的控制器,然后发送到我的模型,然后从数据库中获取信息。

过滤器允许用户提供不同的"范围"作为参数。例如,如果用户想要级别从 0 到 2 的房间,我的控制器会将其分解为以下内容:

$params['levels_from'] = 0; 
$params['levels_to'] = 2;

然后将其发送到我的模型方法,然后像这样构建查询:

$this->db->select();
$this->db->from("rooms");
if($params['levels_from']){
    $this->db->where("rooms.levels >=", $params['levels_from']);
}
if($params['levels_to'] {
    $this->db->where("rooms.levels <=", $params['levels_to'] 
}
$q = $this->db->get();
return $q->result();

这一切都运行良好,但是如果我想让用户能够选择价格范围怎么办。例如,如果他们想要以下内容:

"所有房间都在0-3层,价格从10美元到200美元不等"

我希望查询通过我的表格查看列中的每个价格。

我想用与关卡相同的方式进行操作,但是它需要查看p1,p2,p3和p4以获取所有价格,并且我不知道该怎么做。

约束:我无法修改表。

任何帮助将不胜感激。提前谢谢你。

您应该在每个价格列之间使用 或。查询将如下所示。

select * from room where 
rooms.levels >= levels_from and rooms.levels <= levels_to and 
((rooms.p1 >= price_from and rooms.p1<= price_to) or 
(rooms.p2 >= price_from and rooms.p2<= price_to) or 
(rooms.p3 >= price_from and rooms.p3<= price_to) or 
(rooms.p4 >= price_from and rooms.p4<= price_to))