使用mysql进行此查询的最佳算法

时间:2015-11-03 16:33:30

标签: mysql sql select indexing

我正在寻找使用mysql进行此查询的最佳算法。

SELECT room_no,fname,lname,title,gender,age,text
FROM travelers WHERE reservation_id='9911'
ORDER BY joinnum ASC, id ASC

结果

room_no
1       infant  tess    Mr  M   0   
1       infant2 te1ss   Mr  M   0   
2       tes3    test66  Mr  M   0   
2       tes3    test    Mr  M   0   
2       ss33    test66  Mr  M   0   

我想使用sql功能添加另一个列,它为每个旅行者提供索引,具体取决于room_no,例如

traveler_order  room_no
0                 1  infant     tess    Mr  M   0   
1                 1  infant2    te1ss   Mr  M   0   
0                 2  tes3       test66  Mr  M   0   
1                 2  tes3       test    Mr  M   0   
2                 2  ss33       test66  Mr  M   0   

这意味着根据房间给出一个索引foreach行,即房间1有2个旅行者,选择参数将给出第0行的第0行和第1行的第1行,但第2行开始新房间,因此它将给第2行索引0 1 2 ...等我希望能帮我解决这个问题。

更多说明

我需要的是根据房间号码给出一个旅行者的订单,例如房间1有2个旅行者因此第1行(旅行者1)将取指数0旅行者2将采取(指数1)然后在房间2开始有(3位旅行者)订单将是旅客1在房间2取索引0和旅客2在房间2将取索引1和旅客3在房间2将取索引2如上面的第二个表

1 个答案:

答案 0 :(得分:1)

SELECT  @seq := @seq + 1 AS traveler_order,
        room_no, fname, lname, title, gender, age, text
    FROM travelers
    JOIN ( SELECT @seq := -1 ) AS initialize
    WHERE reservation_id='9911'
    ORDER BY joinnum ASC, id ASC

此外,

INDEX(reservation_id, joinnum, id)

是表现的理想选择。