仅在mysql查询中获取第一行

emi*_*nem 21 mysql

如果我有一个查询,如

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.
  • 要使最后一行反转顺序(将ASC更改为DESC,反之亦然),然后使用LIMIT 1.

  • @George Marian:是的,这就是为什么我写"除非你有一个ORDER BY子句". (2认同)
  • 谢谢,但我想将每一行设置为变量。我确实知道限制条款并且没有寻找那个。 (2认同)

OMG*_*ies 6

您没有指定如何确定订单,但这将为您提供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)

然后,您可以根据排名值选择所需的行.