2013-10-07 85 views
0

我有一個名爲「users」的db表,它有一個名爲「alerts」的列。警報列按照以下順序具有逗號分隔的數據;查找在sql列中具有特定數字/字符串的所有用戶

UserA -> 2314|1,2315|1,2316|3 
UserB -> 4235|2,2315|1,2314|3 
UserC -> 342|5,2314|1,2316|3 

在哪裏如果我分割逗號,然後斜槓分隔值然後;

2314 = pid 
1 = uid 

如果我想搜索所有具有特定pid的用戶,例如, 2314並列出它們,或者將它們全部取出,我應該如何使用以及查詢什麼SQL查詢?

+1

你可以嘗試使用'WHERE field LIKE'$ value |%'OR字段LIKE'%,$ value |%''但是**它會是最好的標準化你的表格。** – Prix

+1

你似乎已經挖出你自己陷入一個非常壞的洞中,那就是桌子結構。如果你可以改變應該是你的優先級的結構,否則你沒有利用關係數據庫。 –

+0

你可以試試@Prix的說法,但是從長遠來看,如果這張表被加載,你會遇到一些可怕的性能問題。我會建議重新組織你的模式,並使用適當的列進行索引和正確排序。 – Jared

回答

1

表面上,你會搜索',2314|',但問題是,值的開始處的數字沒有前面的逗號。

有3種方法可以解決它。

處理開始的情況下,並分別中間情況:

select * from users 
where alerts like '2314|%' 
or alerts like '%,2314|%' 

加一個逗號的值的開頭結合的情況下,使它看起來像一箇中間殼體:

select * from users 
where concat(',', alerts) like '%,2314|%' 

使用正則表達式的情況下結合:

select * from users 
where alerts rlike '(^|,)2314\|' 

重新設計表格以打破新表格以處理您鎖定到一列中的多對多關係會更好。

相關問題