我使用MySQL作为数据库。
现在我让一切正常工作,但由于我的客户想要在网站上过滤,我遇到了某种问题,我到底需要做什么,什么是最好的方法。
这就是我的数据(我会尽可能地简化它)
id name price nr.bed nr.bath
---------------------------------
1 a 33 2 4
2 b 100 5 1
3 c 102 2 2
4 d 85 1 1
5 e 37 6 4
6 f 19 2 1 因此,第一次加载页面时,我使用以下查询从数据库中获取前5个:
SELECT * FROM hotel LIMIT 5我得到了这个:
id name price nr.bed nr.bath
---------------------------------
1 a 33 2 4
2 b 100 5 1
3 c 102 2 2
4 d 85 1 1
5 e 37 6 4 在那之后,我每次都会调用:
SELECT * FROM hotel WHERE id>'last_id(in this case 5)' LIMIT 5我得到的是:
id name price nr.bed nr.bath
---------------------------------
6 f 19 2 1 以此类推。
但现在我需要使用过滤器,例如,我将使用价格过滤器
所以我需要像这样的东西:
SELECT * FROM hotel where id>5 order by price desc LIMIT 5但是,我失去了我的id顺序,我不能从数据库中获得下一个5,因为我不能比较酒店的和id,因为一切都是按价格排序的。
我如何才能做到这一点?我是否需要添加另一个列或其他东西来保持我的顺序不变?所有内容都使用表格中的和id显示在网站上。
编辑:
我甚至不确定这是否可能,因为我需要在asc中排序id,在desc中排序价格,但我不确定我们是否可以在不添加其他列或其他东西的情况下将这两个组合在一起。
EDIT2:
我想买这样的东西。
id id_copy name price nr.bed nr.bath
-----------------------------------------
1 3 c 102 2 2
2 2 b 100 5 1
3 4 d 85 1 1
4 5 e 37 6 4
5 1 a 33 2 4
6 6 f 19 2 1发布于 2013-03-05 22:24:08
首先,当排序很重要时,不应该在不使用order by的情况下使用limit。您的查询应如下所示:
SELECT *
FROM hotel
WHERE id>'last_id(in this case 5)'
ORDER BY id
LIMIT 5对于您的问题,您需要一个子查询:
select *
from (SELECT * FROM hotel where id>5 order by price desc LIMIT 5
) t
order by id内部查询按价格选择5个。外部的是按id排序的。
如果您想将其用于“分页”,那么您应该熟悉limit的offset参数。MySQL documentation here中对此进行了说明。
发布于 2013-03-05 21:46:01
然后订购两列:
SELECT * FROM hotel where id>5 order by price desc , id asc LIMIT 5发布于 2013-03-05 22:46:34
我想这就是你要找的
SELECT * FROM hotel order by price desc limit 0 ,5如果你想要接下来的5
SELECT * FROM hotel order by price desc limit 5 ,5然后
SELECT * FROM hotel order by price desc limit 10 ,5以此类推。
你可以在php中这样做
$sql="SELECT * FROM hotel order by price desc "
if (sombutton is clicked) {
$sql .= " limit 0,5" ;}
if (sombutton is clicked){
$sql .= " limit 5,5" ; }或者你可以在每次加5的时候使用变量$i的循环来完成。
https://stackoverflow.com/questions/15225284
复制相似问题