在表格中,我有以下价值:
ID | Exercise1 | Exercise2 | Exercise3
1 | 0 | 0 | 0
2 | 0 | 0 | 0
当用户完成练习时,db会从“0”切换为“1”。我正在寻找一个sql查询,按用户的ID号搜索返回设置为0的最低列名称。
EX:
ID | Exercise1 | Exercise2 | Exercise3
1 | 1 | 1 | 0
此处查询将返回exercise3
,因为exercise1
和exercise2
之前已由用户更新并完成。
SELECT COLUMN_NAME FROM information_schema.columns
答案 0 :(得分:1)
如果您只有少数练习(例如< 5),那么您只需使用一系列嵌套的IF()语句对查询进行硬编码。
如果您有更多,那么您应该更改您的数据模型,以便每个用户/练习映射存储在一个单独的行中。
答案 1 :(得分:1)
这样的东西?
SELECT CASE
WHEN Exercise1=0 THEN 'Exercise1'
WHEN Exercise2=0 THEN 'Exercise2'
WHEN Exercise3=0 THEN 'Exercise3'
ELSE NULL
END AS Exercise
FROM MyTable
WHERE ID = SomeID
答案 2 :(得分:0)
StudentID | ExcerciseID | Completed
1 | 1 | 1
1 | 2 | 1
1 | 3 | 0
2 | 1 | 0
....
然后你可以这样做:
select StudentID, min(ExcerciseID) as FirstExcerciseNotCompleted
from Excercises
where Completed = 0
要查看每个学生的第一次不完整的练习,或者如果您想将下一个完成的练习设置为学生1,请执行以下操作:
update Excercises
set Completed = 1
where Student = 1 and ExcerciseID = (select min(ExcerciseID) from Excercises where StudentID = 1 and Completed = 0)