【问题标题】:How to find the position of a row in a mysql table? [duplicate]如何在mysql表中找到一行的位置? [复制]
【发布时间】:2015-11-15 02:25:10
【问题描述】:

是否可以在mysql表中找到一行的位置?

例如,如果我们有 mysql 查询

SELECT * FROM `table` WHERE `Date` > X ORDER BY `Date` DESC

这将选择在 X 之后创建的所有行,并根据它们的创建日期排列它们。现在,如果我知道其中一个行 ID,是否可以修改此查询代码,以便我知道它在什么位置在这个查询中。

我的意思是说查询给出了 5 行,而我知道其 ID 的行是其中之一,是否可以检查它在查询中的位置。我的意思是,是第 1 次、第 2 次、...、第 5 次吗?

我希望我清楚地解释了我的问题。

使用 Blizz 的建议我发现

SET @I=0; SELECT @I:=@I+1 AS `I`, `ID`, `From`, `Action`, `To`, `Value`, `Date` FROM `papers` WHERE `Action` = 'Review'  GROUP BY `ID` ORDER BY `Date` DESC

做我想要的,但是它只在 localhost/phpmyadmin 中有效,当我在 localhost/mysite 中运行它时,会出现错误提示

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 'SELECT @I:=@rank+1 AS rank, ID, From, Action, To, Value, Date FROM `' 在第 1 行

有人知道为什么会这样吗?

【问题讨论】:

  • 希望这可以解决您的问题 [在 MYSQL 查询中获取行位置 [重复]][1] [MySQL 在 ORDER BY 中获取行位置][2] [1]:stackoverflow.com/questions/7057772/… [2]: stackoverflow.com/questions/3614666/…
  • @Blizz,你知道我的问题为什么会出现这个错误吗?
  • 您的示例查询是2条语句,正常的mysql查询语句不会执行。您可以在选择初始化变量@I 时使用交叉连接重写它

标签: php mysql


【解决方案1】:

您的示例 SQL 语句是 2 条实际语句。大多数 php MySQL 函数都在一条语句上工作。

你可以使用交叉连接来强制初始化变量:-

SELECT @I:=@I+1 AS `I`, `ID`, `From`, `Action`, `To`, `Value`, `Date` 
FROM `papers` 
CROSS JOIN 
(
    SELECT @I := 0
) sub0
WHERE `Action` = 'Review'  
GROUP BY `ID` 
ORDER BY `Date` DESC

请注意,与处理变量的位置相比,字段的排序也可能存在问题,您可能应该在处理变量以添加计数器之前对子查询中的数据进行排序。

SELECT @I:=@I+1 AS `I`, `ID`, `From`, `Action`, `To`, `Value`, `Date` 
FROM `papers` 
(
    SELECT `ID`, `From`, `Action`, `To`, `Value`, `Date` 
    FROM `papers` 
    WHERE `Action` = 'Review'  
    GROUP BY `ID` 
    ORDER BY `Date` DESC
)
CROSS JOIN 
(
    SELECT @I := 0
) sub0
ORDER BY `Date` DESC

【讨论】:

    猜你喜欢
    • 2010-10-30
    • 1970-01-01
    • 2011-01-29
    • 2014-12-08
    • 2018-03-25
    相关资源
    最近更新 更多