我有一个复杂的选择:
select id from table
left join...
left join... (a lot of joins)
where ... (a lot of ANDs and ORs)
order by... (a lot of orders)
我得到的结果如下:
1234
5565
7212
2212
etc.
我有一个属于结果集的id,如7212,并想知道结果集中哪一行与id匹配(从第0行开始,这将是我示例中的第2行)。
现在我正在读取所有数据并在php中进行比较,但我想知道是否有一个SQL语句为我做了这个,结果2在输入7212时。
实际上我想得到上一个和下一个id(第1行和第3行= 5565和2212),如果在一个查询中以某种方式可能会更好。
答案 0 :(得分:1)
您可以选择数字行:
select @rownum:=@rownum+1 No, foo, bar from table, (SELECT @rownum:=0) r;
这可能与此处提出的问题重复:How to show sequential number in MySQL query result
答案 1 :(得分:1)
为每个选定的行添加auto_increment索引:
SELECT
@i:=@i+1 as index,
id
FROM table, (SELECT @i:= 0) AS i
LEFT JOIN...
LEFT JOIN...(a lot of joins)
WHERE ... (a lot of ANDs and ORs)
ORDER BY... (a lot of orders)
给你这个:
index id
1 1234
2 5565
3 7212
4 2212