我需要向学生展示1000个测试题,每页10个。
问题在mysql表中,答案将放在另一个表中。
我需要每个学生的问题以不同于任何其他学生的预定顺序出现。排序顺序是在注册并放入usermeta表时预先确定的。
在usermeta表中,有一列列出了应显示问题的顺序。该列中的顺序对每个学生都是唯一的,如下例所示:8 | 14 | 97 | 54 | 21 | 37 | 54 | 61 ......等等。
要向学生展示的第一个问题是问题#8,然后是问题#14,然后是问题#97,依此类推,每页列出10个。
我不需要将问题排序为asc或desc。此外,我可以更改数据库结构,如果这有助于找到解决方案。
答案 0 :(得分:1)
此外,我可以更改数据库结构,如果这有助于找到一个 溶液
如果可以更改数据库结构,那么不要将排序顺序存储为管道分隔字符串,而是将其存储在一个单独的表中,该表将每个问题映射到它应该为给定学生出现的顺序。即。
student_id, sort_order, question_id
1 1 8
1 2 2
1 3 97
然后在为特定学生选择问题时加入您的排序表。
SELECT q.* FROM
questions q
JOIN questions_sorting_order qso
ON q.id = qso.question_id
ORDER BY qso.sort_order
WHERE qso.student_id = :student_id
答案 1 :(得分:0)
SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+
SELECT i2.i*10+i1.i x
, FIND_IN_SET(i2.i*10+i1.i,'8,14,97,54,21,37,54,61') y
FROM ints i1
, ints i2
HAVING y > 0
ORDER
BY y;
+----+---+
| x | y |
+----+---+
| 8 | 1 |
| 14 | 2 |
| 97 | 3 |
| 54 | 4 |
| 21 | 5 |
| 37 | 6 |
| 61 | 8 |
+----+---+
请注意,第二次忽略54