2017-08-08 118 views
1

假设我有一个数据库表,其中有很多行我想要显示给用户。限制输出并制作页面是有意义的。在MySQL我这样做:如何在MySQL中使用LIMIT时轻松获取行号?

SELECT * FROM myTable ORDER BY myValue LIMIT 120,10 

这将显示10行从120行开始那么MySQL必须使用,在内部,某种秩序,并相应编号的行。我想显示每行的行号。如何仅使用MySQL访问这些数字?要清楚,我正在寻找这样的东西:

SELECT *,<LIMIT_ROWNO> FROM myTable ORDER BY myValue LIMIT 120,10 

我看了网上和手册,但我找不到它。我更喜欢简单的东西,而不使用变量或函数。没有预定义的表达式吗?

我可以很容易地在PHP中解决这个问题,但从MySQL获取行号更合乎逻辑。

+1

没有默认顺序。结果是随机的或更好的术语是不可取的。 –

+0

你可以尝试使用变量.. –

+0

@juergen d:在我的例子中,我没有指定'ORDER BY',因为它不是必需的。即使订单是随机的,问题仍然有效。 –

回答

4

你不能做到这一点,而不使用变量,例如:

SELECT m.*, @rownum := @rownum + 1 as `num` 
FROM myTable m, (SELECT @rownum := 120) a 
ORDER BY myValue LIMIT 120,10; 
+0

超级喜欢的人.. !! –

+0

是的,我可以看到这是如何工作的。在相同的查询中隐藏'rownum'的初始化是一个'很好'的接触。最后,我选择在PHP中实现它。我已经有了一个复杂的查询,这使得它更加丑陋。无论如何,你确认我怀疑我无法直接从MySQL获取行号。 –

2
set @rownum=120; 
SELECT *,@rownum:[email protected]+1 as rn FROM myTable ORDER BY myValue LIMIT 120,10; 
+0

请更正您的答案,使'rownum'开始于LIMIT开始的地方。 –

+0

我改正了,亲爱的 –