首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用order by时,id order混合

使用order by时,id order混合
EN

Stack Overflow用户
提问于 2013-03-05 21:42:12
回答 3查看 88关注 0票数 0

我使用MySQL作为数据库。

现在我让一切正常工作,但由于我的客户想要在网站上过滤,我遇到了某种问题,我到底需要做什么,什么是最好的方法。

这就是我的数据(我会尽可能地简化它)

代码语言:javascript
复制
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个:

代码语言:javascript
复制
SELECT * FROM hotel LIMIT 5

我得到了这个:

代码语言:javascript
复制
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 

在那之后,我每次都会调用:

代码语言:javascript
复制
SELECT * FROM hotel WHERE id>'last_id(in this case 5)' LIMIT 5

我得到的是:

代码语言:javascript
复制
id  name  price  nr.bed  nr.bath
--------------------------------- 
6     f     19     2        1 

以此类推。

但现在我需要使用过滤器,例如,我将使用价格过滤器

所以我需要像这样的东西:

代码语言:javascript
复制
SELECT * FROM hotel where id>5 order by price desc LIMIT 5

但是,我失去了我的id顺序,我不能从数据库中获得下一个5,因为我不能比较酒店的和id,因为一切都是按价格排序的。

我如何才能做到这一点?我是否需要添加另一个列或其他东西来保持我的顺序不变?所有内容都使用表格中的和id显示在网站上。

编辑:

我甚至不确定这是否可能,因为我需要在asc中排序id,在desc中排序价格,但我不确定我们是否可以在不添加其他列或其他东西的情况下将这两个组合在一起。

EDIT2:

我想买这样的东西。

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-05 22:24:08

首先,当排序很重要时,不应该在不使用order by的情况下使用limit。您的查询应如下所示:

代码语言:javascript
复制
SELECT *
FROM hotel
WHERE id>'last_id(in this case 5)'
ORDER BY id
LIMIT 5

对于您的问题,您需要一个子查询:

代码语言:javascript
复制
select *
from (SELECT * FROM hotel where id>5 order by price desc LIMIT 5
     ) t
order by id

内部查询按价格选择5个。外部的是按id排序的。

如果您想将其用于“分页”,那么您应该熟悉limitoffset参数。MySQL documentation here中对此进行了说明。

票数 0
EN

Stack Overflow用户

发布于 2013-03-05 21:46:01

然后订购两列:

代码语言:javascript
复制
SELECT * FROM hotel where id>5 order by price desc , id asc LIMIT 5
票数 0
EN

Stack Overflow用户

发布于 2013-03-05 22:46:34

我想这就是你要找的

代码语言:javascript
复制
   SELECT * FROM hotel  order by price desc limit 0 ,5

如果你想要接下来的5

代码语言:javascript
复制
 SELECT * FROM hotel  order by price desc limit 5 ,5

然后

代码语言:javascript
复制
   SELECT * FROM hotel  order by price desc limit 10 ,5

以此类推。

你可以在php中这样做

代码语言:javascript
复制
   $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的循环来完成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15225284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档