有時候,我們在做條件查詢的時候會用到in,比如有一張學生表,student,查出id爲1,2,5,7學生的信息
select * from student where id in (1,2,5,7);
但是,如果這個條件不是已知字符串,是未知的變量呢?比如有一文章表article,可設置對哪些學生可見,表中字段:
article_id:主鍵
article_name:文章名稱
article_content:文章內容
is_set_show:是否設置對學生可見, 0:不設置,代表所有人可見,1代表只對部分學生可見
show_student_id:爲可見文章學生id,以逗號連接,如6,23,12,22
現在已知該學生id爲23,現在查詢他可見的所有文章:
我們經常會像下面這樣寫:
select * from article where is_set_show=0 or (is_set_show=1 and 23 in(show_student_id));這樣寫通常查不出想要的結果,除非學生id23是show_student_id字段的第一個元素
解決辦法:
這時就用到find_in_set這個函數了
select * from article where is_set_show=0 or (is_set_show=1 and
find_in_set(23,show_student_id));
這樣就能取到相應的結果了
總結:in只適用於已知的字符串查找,如果爲可變未知的變量,則需要find_in_set了