mysql查詢時in與find_in_set的區別

有時候,我們在做條件查詢的時候會用到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));這樣寫通常查不出想要的結果,除非學生id23show_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了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章