0
我有一個查詢,從一堆表中獲取信息,包括根據另一個表中的字段的值將兩列設置爲1或0;你可以忽略絕大多數它 - 我只關心兩個IF行:FIND_IN_SET在mysql
SELECT DISTINCT CONCAT(np.first_name,' ',np.last_name) AS name, np.last_name, np.id, np.title, nc.web_name AS company, xsp.image_file AS image,
IF(prx.people_role_id IN(7,8),1,0) AS rfac,
IF(prx.people_role_id = 8,1,0) AS dfac
FROM expo_speaker xsp
LEFT JOIN expo_session_speaker xssx ON xssx.speaker_id = xsp.speaker_id
LEFT JOIN expo_session xss ON xss.session_id = xssx.session_id
LEFT JOIN new_people np ON np.id = xsp.people_id
LEFT JOIN people_role_xref prx ON prx.people_id = np.id
LEFT JOIN new_company nc ON np.company_id = nc.id
WHERE np.active = 1
AND xss.session_id = $sym->id
GROUP BY np.title
ORDER BY np.last_name
這只是正常工作時,每個人只能有一個角色(由prx.people_role_id表示)。但是,最近需求發生了變化,每個用戶現在可以擁有從零到十二個不同角色的任何位置(並且該編號可以隨時更改)。
我查看了find_in_set,但無法弄清楚如何組合它帶有IN子句。我試過group_concat(prx.people_role_id),它給了我一個分配給用戶的所有角色的以逗號分隔的列表。如果只有一個我們正在尋找的角色,那麼使用find_in_set來查看角色列表中是否存在該角色將很容易。但是對於其中一個IF語句,我們有兩個可能的角色。我如何組合這些函數(或任何其他)來確定group_concat列是包含7還是8?