根据位置和位置顺序随机2条记录

时间:2016-02-12 12:47:00

标签: mysql

question_tbl: q_id(int)PK,position(int),q_type(varchar(255)),question(varchar(255)),level(int)

我试过查询:

SELECT q_id, position, q_type, question, level
FROM (SELECT * FROM tbl_question ORDER BY rand()) a
WHERE level = '1'
ORDER BY position

得到以下结果:

q_id    position    qtn     level
1           1       demo      1
2           1       demo12    1
3           1       demo21    1
4           2       demo22    1
5           2       demo11    1
6           2       demo31    1
7           3       demo41    1
8           3       demo51    1
9           4       demo61    1
10          1       demo71    1
11          1       demo81    1
12          2       demo91    1
13          3       demo511   1
14          4       demo514   1
15          4       demo4511  1

预期结果: 根据位置和顺序随机2条记录如下:

q_id    position    qtn     level
2           1       demo12    1
3           1       demo21    1
4           2       demo22    1
5           2       demo11    1
7           3       demo41    1
8           3       demo51    1
9           4       demo61    1
15          4       demo4511  1

按位置要求randome 2记录

2 个答案:

答案 0 :(得分:1)

你只是随机化然后重新排序整套。

你只想要2行吗?

因此,使用LIMIT 2在内部查询中只获得2

left: 50%;
transform: translateX(-50%);

我认为这就是你想要的。

答案 1 :(得分:1)

您可以按position, rand()排序,以便在每个position分区中包含随机顺序。然后使用变量枚举position分区的记录:

SELECT q_id, position, qtn, level, rn
FROM (
  SELECT q_id, position, qtn, level,
           @rn := IF(@pos = position, @rn + 1,
                   IF(@pos := position, 1, 1)) AS rn
  FROM (
    SELECT *
    FROM tbl_question     
    WHERE level = '1'
    ORDER BY position, rand() ) a
  CROSS JOIN (SELECT @rn := 0, @pos := 0) AS vars ) b
WHERE b.rn <= 2  
ORDER BY position

外部查询使用@rn从每个position分区中仅选择两条记录。

Demo here