【问题标题】:Get only second last record - mysql-query仅获取倒数第二个记录 - mysql-query
【发布时间】:2013-08-14 21:17:37
【问题描述】:

我有如下表格记录:-

my_table

        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 查询中? 请帮帮我。

【问题讨论】:

  • 你真正想要什么? (为什么你想要记录 3 的前一条记录?)你想要评分为 0.0 的第一条记录吗? “第一”是什么意思? (我假设您的意思是第一条记录是“id”最低的记录,但您根本不按 id 排序。)您可以尝试像select * from my_table where rating = {what you want} order by id limit 1 这样简单的东西。
  • 这里 id = 3 不是静态的。假设我在查询中提供了 id = 1,那么它将检索记录 4|1.0|good。请冷藏问题

标签: php mysql sql


【解决方案1】:

使用这个:

SELECT * FROM my_table ORDER BY rating DESC LIMIT 2,1

【讨论】:

  • 这不是明智的解决方案。如果我想检索 id 1 的先前记录怎么办?您的查询每次都会给出静态输出
【解决方案2】:

试试这个

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

【讨论】:

    【解决方案3】:

    试试这个快速解决方案:

    SELECT * FROM my_table WHERE rating='0.0' and id

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

    【讨论】:

    • 您好 Robert Seddon-Smith,这不适用于 id = 1。
    • 当然不是 - id1 是您列表中的第一个,所以在它之前不会有其他人。
    【解决方案4】:

    试试这个:

    select * from my_table 
    where rating<(select max(rating) from my_table)
    and
    id<3
    limit 1; 
    

    【讨论】:

      猜你喜欢
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      相关资源
      最近更新 更多