如果我有一个查询,如
select * from tbl_foo where name = 'sarmen'
Run Code Online (Sandbox Code Playgroud)
并且这个表有多个name = sarmen的实例我怎样才能为每行虚拟分配行号而不必创建一个自动执行的列?我有一个原因,我在做什么,不需要在我的例子中使用auto_incrimented col.
所以,如果每一行都通过sql或php分配一个虚拟行号,我将能够随时打印出第一行或最后一行.
日Thnx
Mar*_*ers 33
要仅返回一行使用LIMIT 1
:
SELECT *
FROM tbl_foo
WHERE name = 'sarmen'
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
除非你有一个ORDER BY
条款,否则说"第一行"或"最后一行"是没有意义的.假设您添加了一个ORDER BY
子句,那么您可以通过以下方式使用LIMIT:
LIMIT 1
.LIMIT 1, 1
.LIMIT 1
.您没有指定如何确定订单,但这将为您提供MySQL中的排名值:
SELECT t.*,
@rownum := @rownum +1 AS rank
FROM TBL_FOO t
JOIN (SELECT @rownum := 0) r
WHERE t.name = 'sarmen'
Run Code Online (Sandbox Code Playgroud)
然后,您可以根据排名值选择所需的行.