2017-04-27 8 views
0

は私が持っているテーブルを正規化する簡単な方法は、ユーザーが登録しているときより多くの行で更新を取得しているユーザーがテーブルの一部でありますこのようなテーブルが - これ

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

コメント:新しいテーブルを作成するが、それを行うには、ユーザーテーブルからちょうど正しい選択クエリではないLITTEL検索は、私はにこのテーブルを変換するintrestedてよ。 私はphpmyadminでmysqlを使用しています。どんな助けも歓迎されます。ありがとうございました。

+2

素晴らしいアイデアが悪いデザインを修正します!データをカンマ区切りのアイテムとして保存することは決してありません。これは多くの問題を引き起こすだけです。 – jarlh

+0

質問を編集して最後の部分に言い換えてください。私はあなたが何を求めているのか理解できません。 –

+0

カンマで区切られたリストを 'languages'カラムで扱うためのビューやチャンクが必要なようです。ネストされたSUBSTRING_INDEX()関数呼び出しを使用してこれを取得することができます。新しい正規化されたテーブルを作成するのではなく、このテーブルを保持することはあまりにもひどい考えであるので、私はあなたにそれを行う方法を教えることを躊躇します。 –

答えて

0

他にも述べたように、カンマ区切りの値を列に格納すると、時間の経過とともにあらゆる種類の痛みが発生します。それを言っている...

番号表を作成します(これを行う方法の1つは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

関連する問題