簡體   English   中英

匹配逗號分隔的列值

[英]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.

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