3

我有一个如下表记录: -

我的表

        id |      rating | description

         1 |         0.0 | bed
         2 |         1.0 | good
         3 |         0.0 | bed
         4 |         1.0 | good
         5 |         0.0 | bed
         6 |         0.0 | bed
         7 |         0.0 | bed

现在我通过评级缩短了这张表,我得到了以下结果。(查询:SELECT * FROM my_table ORDER BY rating DESC)

结果表

        id | rating      | description

         2 |         1.0 | good
         4 |         1.0 | good
         1 |         0.0 | bed
     ==> 3 |         0.0 | bed
         5 |         0.0 | bed
         6 |         0.0 | bed
         7 |         0.0 | bed

现在我想要以前的 id = 3 记录。

预期结果

        id | rating      | description

         1 |         0.0 | bed

我怎样才能实现它。在单个 mysql 查询中?请帮我。

4

4 回答 4

4

用这个:

SELECT * FROM my_table ORDER BY rating DESC LIMIT 2,1
于 2013-08-14T07:08:51.967 回答
0

尝试这个

SELECT prev.id, rating, description
FROM my_table current
JOIN my_table prev
  ON (prev.rating < current.rating) 
     OR (prev.rating = current.rating 
        AND (prev.description < current.description 
            OR (prev.description = current.description AND prev.id < current.id)))
WHERE current.id = @currentId
ORDER BY prev.rating desc, prev.description desc, prev.id desc
LIMIT 1
于 2013-08-14T07:13:15.443 回答
0

试试这个快速解决方案:

SELECT * FROM my_table WHERE rating='0.0' and id<'3' ORDER BY id DESC LIMIT 1

这将选择 ID 比指定的评级为 0.0 的 ID 下一个最低的行。这将在没有排序的情况下工作,但不会检索任何评级为 1.0 的行,即使它们是下一行。

于 2013-08-14T08:13:11.110 回答
0

尝试这个:

select * from my_table 
where rating<(select max(rating) from my_table)
and
id<3
limit 1; 
于 2013-08-14T13:17:37.520 回答