如何在记录编号的同时用MySQL选择多行?

时间:2014-06-09 07:35:29

标签: mysql sql sorting

我已经问了这样一个问题,但从来没有得到一个好的答案,所以我再次给出了再次曝光的答案。

基本上我有一个包含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

问题1:

如何对这些行进行编号并按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}}列。

这是对的吗?

问题2:

如何不仅选择sort个数字5,还可以选择2个其他列。我需要选择5号以上的2+记录和5号以下的2+记录。在这种情况下,这些记录的排序号将是:3,4和6,7。

我无法找到选择更多行的解决方案。

1 个答案:

答案 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)