2016-04-06 86 views
0

我在我的數據庫表中存儲名爲「user_id」的VARCHAR(255)字段,其中存儲逗號分隔的用戶標識如234,235。如何在mysql IN()函數中使用字符串?

我在查詢一個內層查詢是如下其中「s」是我的表的別名:

(SELECT group_concat(concat(first_name,' ',last_name)) from users where user_id IN (s.user_id)) as user_name 

現在我正在s.user_id值這樣的:「234,235」 所以在結果我只獲得第一個用戶的名字。我希望兩個用戶的名稱逗號分開。 (我想=>('234','235')或(234,235),以便它在IN()函數中工作)

使用FIND_IN_SET()函數不可行,因爲我的查詢太長。

+0

請發佈整個查詢,以避免誤解 – lad2025

回答

0

將ID存儲在需要引用的逗號分隔字符串中是不好的設計。規範化數據並以數據庫本機支持的方式進行存儲會更好。

也就是說,你需要在一個字符串中查找用戶ID,所以一個解決方案是一個正則表達式。 這很慢,我認爲值得努力在單獨的表格/列中重新組織您的ID。

SELECT group_concat(concat(first_name,' ',last_name)) 
FROM users 
WHERE s.user_id REGEXP CONCAT('(^|,)', user_id, '($|,)') 

這是你的ID在任一側或字符串的開頭或結尾逗號匹配。

+0

我無法更改我的數據庫,因爲它已經設計好了。 我試過這個查詢,但是它返回NULL。 – Sohil

+0

在where子句中向後獲取user_id字段。請參閱我的編輯。 –

相關問題