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记录
答案 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
分区中仅选择两条记录。