0

我有一个用于比赛的 MySQL 表,名为users. 现在,我希望能够创建一个 select 语句,按post_comp DESC, posted_last ASC. 在这种排序之后,首先返回的人是#1,第二行是#2,依此类推。但是,我想更进一步,返回表中特定用户的位置。现在,每个用户都有自己的 id zbid,. 我还需要添加WHERE cid=3 AND post_comp>0到查询的末尾。

这是我尝试过的:

SELECT u.zbid,u.post_comp, @curRow := @curRow + 1 AS row, IF(u.zbid=123,1,0) AS me FROM users u, (SELECT @curRow := 0) r WHERE cid=3 AND post_comp > 0 ORDER BY u.post_comp DESC, u.posted_last ASC

现在它所做的是返回以下内容: zbid, post_comp, row,如果它是我特别想要返回的行,则为 1,否则为 0 meme因此,如果我正在寻找用户的位置zbid=123,它会对表格进行排序,将所有数据带回给我,并且无论用户在哪里zbid=123,都会返回一个me=1结果。row表示用户在竞争中的位置。

现在,我这工作正常,唯一的问题是它返回所有这些行,我只希望它返回带有me=1. 我尝试将另一个附加ORDER BY me DESC LIMIT 1到最后,但这弄乱了之前的顺序并且没有用。还有其他建议吗?

4

1 回答 1

2
SELECT * 
FROM (
  SELECT u.zbid,u.post_comp, @curRow := @curRow + 1 AS row, 
         IF(u.zbid=123,1,0) AS me 
  FROM users u, (SELECT @curRow := 0) r 
  WHERE cid=3 AND post_comp > 0 
  ORDER BY u.post_comp DESC, u.posted_last ASC
) temp 
WHERE me=1
于 2012-08-15T23:24:05.417 回答