我有一张桌子,显示有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();
这一切都运作良好,但如果我想让用户能够选择价格范围怎么办呢。例如,如果他们想要以下内容:
&#34;所有级别为0-3的房间,价格范围为$ 10- $ 200&#34;
我希望查询通过我的表格查看列中的每个价格。
我想这样做的方式和我做的水平相同,但它需要通过p1,p2,p3和p4查看所有价格,我不知道该怎么做。
约束:我无法修改表格。
非常感谢任何帮助。提前谢谢。
答案 0 :(得分:1)
您应该使用或在每个价格列之间。查询看起来像这样。
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))