2017-04-27 50 views
0

我有一個這樣的表 - 這是這是越來越更新與更多的行,當用戶在註冊用戶表的一部分:一個簡單的方法來規範表

user_id languages 
1  english, french 
2  english,german,french 
3  german 
4  english, spanish 

,爲了做一個LITTEL搜索我intrested轉化此表成:

user_id language 
1   english 
1   french 
2   english 
2   german 
2   french 
3   german 
4   english 
4   spanish 

點評:沒有建立新表,但正好從用戶表中的正確選擇查詢做到這一點。 我用phpmyadmin使用mysql。任何幫助將受到歡迎。謝謝。

+2

好主意修復壞的設計!永遠不要將數據存儲爲逗號分隔的項目,它只會導致你很多麻煩。 – jarlh

+0

你能編輯問題並改寫最後一部分嗎?我不明白你在問什麼。 –

+0

這聽起來像你想要一個查看或一大堆查詢,將處理'語言'列中的逗號分隔列表。你可以使用一堆嵌套的SUBSTRING_INDEX()函數調用來獲取它。我毫不猶豫地告訴你如何去做,因爲保持這張桌子而不是創建一個新的標準化桌面是一個非常可怕的想法。 –

回答

0

正如其他人所說,將逗號分隔的值存儲在列中會隨着時間的推移導致各種各樣的痛苦。話雖如此......

創建一個數字表(一種方法是描述here)。一旦你的,你可以用它來你的逗號分隔值拆分到不同的行:

select lang.user_id, 
     SUBSTRING_INDEX(SUBSTRING_INDEX(lang.languages, ', ', numbers.n), ', ', -1) language 
from numbers 
inner join lang on CHAR_LENGTH(lang.languages) - CHAR_LENGTH(REPLACE(lang.languages, ', ', ' ')) >= numbers.n - 1 
order by lang.user_id, numbers.n; 

DEMO

相關問題