我有一张表格,显示有 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))