簡體   English   中英

標准化表格的簡單方法

[英]A simple way to normalize a table

我有一個這樣的表-這是用戶表的一部分,當用戶注冊時,該表將更新更多行:

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

為了進行小字搜索,我很想將這張桌子變成:

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

注釋:不創建新表,而只是從用戶表中執行正確的選擇查詢即可。 我正在將mysql與phpmyadmin一起使用。 任何幫助都將受到歡迎。 謝謝。

正如其他人所述,將逗號分隔的值存儲在列中會隨着時間的流逝而引起各種麻煩。 話說回來...

創建一個數字表( 此處描述一種方法)。 一旦有了它,就可以使用它來將逗號分隔的值拆分為單獨的行:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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