我已经问了这样一个问题,但从来没有得到一个好的答案,所以我再次给出了再次曝光的答案。
基本上我有一个包含3列的表:id,user,number。我在这张表中也有10条记录,如下所示:
id user number
-- ---- ------
1 user1 10
2 user2 5
3 user3 30
4 user4 45
5 user5 5
6 user6 22
7 user7 10
8 user8 40
9 user9 90
10 user10 65
如何对这些行进行编号并按number
对其进行排序并选择特定ID。例如,我想选择,id = 6
。它应该对整个表格进行排序,并为每个表格提供一个唯一的编号。
我需要得到以下内容:
SORT id user number
---- -- ---- ------
1 2 user2 5
2 5 user5 5
3 1 user1 10
4 7 user7 10
5 6 user6 22
6 3 user3 30
7 8 user8 40
8 4 user4 45
9 10 user10 65
10 9 user9 90
我找到了一个功能,它似乎正在起作用:
SELECT * FROM (SELECT @sort:=@sort+1 AS sort, number, user, id FROM table,
(SELECT @sort := 0) s ORDER BY number DESC) t WHERE id = 6
所以这实际上会返回一个5 {/ 1}}列。
这是对的吗?
如何不仅选择sort
个数字5,还可以选择2个其他列。我需要选择5号以上的2+记录和5号以下的2+记录。在这种情况下,这些记录的排序号将是:3,4和6,7。
我无法找到选择更多行的解决方案。
答案 0 :(得分:1)
问题2的可能解决方案。
生成一次序列号并获取所需的行,然后将其连接到同一查询,但序列号在您需要的范围内: -
SELECT sub2.sort, sub2.number, sub2.user, sub2.id
FROM
(
SELECT @sort1:=@sort1+1 AS sort, number, user, id
FROM table,
(SELECT @sort1 := 0) s
ORDER BY number DESC
) sub1
INNER JOIN
(
SELECT @sort2:=@sort2+1 AS sort, number, user, id
FROM table,
(SELECT @sort2 := 0) s
ORDER BY number DESC
) sub2
ON sub1.id = 6
AND sub2.sort BETWEEN (sub1.sort - 2) AND (sub1.sort + 2)