簡體   English   中英

在MySQL中為FIND_IN_SET

[英]FIND_IN_SET in mysql

我有一個查詢,它從一堆表中獲取信息,包括根據另一張表中字段的值將兩列設置為1或0。 您可以忽略其中的絕大多數-我只關心兩條IF線:

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?

得到它了;

IF((find_in_set(7, group_concat(prx.people_role_id))) OR (find_in_set(8, group_concat(prx.people_role_id))),1,0) AS rfac,
IF(find_in_set(8, group_concat(prx.people_role_id)),1,0) as dfac

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM