如何在mysql表中找到行的位置?

时间:2015-08-21 08:02:25

标签: php mysql

是否可以在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 rankIDFromActionTo,   ValueDate来自`'在第1行

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

您的示例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