通过Codeigniter构建MySql查询,获取多列中的价格范围

时间:2015-03-12 14:46:45

标签: php mysql sql codeigniter

我有一张桌子,显示有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查看所有价格,我不知道该怎么做。

约束:我无法修改表格。

非常感谢任何帮助。提前谢谢。

1 个答案:

答案 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))