如何使用类似%%值的find_in_set(value,column)

时间:2014-06-13 14:16:32

标签: mysql sql

Mysql表" DemoTable" (id - >自动增量)

id   subject_id  subject_name  question  exams
1        3         sub3         ques1    e1,e4
2        3         sub3         ques2    e1
3        2         sub2         ques3    e1
4        2         sub2         ques4    e3,e5

我想要的是跟随输出的情况 - where exams like '%e1%'

subject_id  subject_name  number_of_questions
    3         sub3         2
    2         sub2         1

在Stackoverflow用户juergen d的帮助下,我使用了这个查询 -

SELECT subject_id, subject_name, COUNT(distinct question) as questions_count 
FROM DemoTable 
where find_in_set('e1', exams) > 0
group by subject_id, subject_name

但是,此查询的问题是输出为 -

subject_id  subject_name  questions_count 
    3         sub3         1
    2         sub2         1

这意味着,它只计算行where exams = 'e1',因此它不包含第一行where exams = 'e1,e4' [通过where exams like '%e1%'包含在正常情况下]

应该使用什么查询来获得所需的输出?

感谢。的问候,

1 个答案:

答案 0 :(得分:2)

Juergen的回答应该是正确的。事实上,它应该比这个版本更好:

SELECT subject_id, subject_name, COUNT(distinct question) as questions_count 
FROM DemoTable 
where exams like '%e1%'
group by subject_id, subject_name;

优点是,在搜索e10时,他的版本不会混淆e1e1。我怀疑您的问题和您网站上的数据是不同的。你应该尝试设置一个SQL小提琴。