[英]Match comma separated column values
注意:數據已經以這種格式存儲。
我正在嘗試匹配兩個逗號分隔的值。
表記錄:
user_id state_id city_id role_id
1 1,2,3 1,2 3,4
2 5,6,8,10 9,11,15 1,2
3 7,8 10 2,5
我想將列值與給定值匹配。
每列應匹配一個或多個值。
試過:
SELECT user_id
FROM users
WHERE
CONCAT(',', state_id, ',') LIKE '%,5,10,%' AND
CONCAT(',', city_id, ',') LIKE '%,9,15,%' AND
CONCAT(',', role_id, ',') LIKE '%,1,%'
預期 output 是用戶 ID“2”,因為它與給定值匹配,但上面的查詢生成空結果。
您可以使用find_in_set
:
SELECT user_id
FROM users
WHERE
find_in_set('5', state_id) <> 0 AND find_in_set('10', state_id) <> 0 AND
find_in_set('9', city_id) <> 0 AND find_in_set('15', city_id) <> 0 AND
find_in_set('1', role_id) <> 0
但作為一般建議,您應該規范化您的表格。 檢查在數據庫列中存儲分隔列表真的那么糟糕嗎?
這個 model 不是最好的,但由於你沒有定義它,你只需要查詢....
SELECT user_id
FROM users
WHERE
state_id LIKE '%5%10%' AND
city_id LIKE '%9%15%' AND
role_id LIKE '%1%'
PS。 注意你的表現,因為文本字段中的倍數 LIKE (我認為它是一個 varchar。)可能會產生其他問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.