使用order by时,id顺序混合

时间:2013-03-05 13:42:12

标签: mysql sql database sql-order-by

我使用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订单,我无法从数据库中获得接下来的五个,因为我无法与酒店的id进行比较,因为一切都按价格排序。

我怎样才能做到这一点? 我是否需要添加另一列或其他可以保持订单的列?所有内容都在网站上使用,并在表格中显示。

编辑:

我不确定这是否可能,因为我需要在asc和desc中订购id,但我不确定我们是否可以将这两者组合在一起而不添加其他列或其他内容。

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

3 个答案:

答案 0 :(得分:0)

然后订购两列:

SELECT * FROM hotel where id>5 order by price desc , id asc LIMIT 5

答案 1 :(得分:0)

首先,在排序很重要时,绝不要在没有limit的情况下使用order by。您的查询应该是:

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排序。

如果你想将它用于“分页”,那么你应该熟悉offset的{​​{1}}参数。这在MySQL文档here中有描述。

答案 2 :(得分:0)

我认为这就是你要找的东西

   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的循环来完成。