2016-09-29 23 views
0

たとえば、私は別のリファラを挿入する必要があり、同じ行に複数の値を挿入する必要がsite.theテーブルのために来たでMySQLのテーブルの同じ行の挿入複数の値

|Date |Ref   |Uri 
-------------------------- 
28/9 |ref1 ref2 ref3 |url1 

のように見えます同じ日付とリンクの表の上に3つの異なる参照元があります。 特定の日付の同じ行にリファラーを格納し、個々のリファラーを取得する方法はありますか。 希望は私の要件を理解している

+0

カンマ区切りの変数に移動します。 '、ref1、ref2、ref3、'のように。後でカンマ(プログラム内)で値を展開してから取り出すことができます。もしあなたが 'ref2'のすべてのレコードを探したいとしたら' like '、ref%' 'を使うことができます。 – Rajesh

+1

あなたはそのようなデータをMySQLに保存すべきではありません。 行には、複数の値がコンマ、スペースなどで区切られて保存されている列を使用できません。むしろ、そのようなデータを複数の行に分ける必要があります。 これにより、任意の行を簡単に検索、更新、削除できます。 – t9toqwerty

+0

私たちはあなたの問題を解決できますか? – rbr94

答えて

2

これは可能ですが、そうしてはいけません。これはデータベースの正規化の規則と矛盾しています。この規則はhttps://en.wikipedia.org/wiki/Database_normalizationです。

上記のテーブルの主キーを含む別のテーブルを使用し、それを各refキーに接続します。例:

既存の表:

T-Id |Date |Uri 
-------------------------- 
1 | 28/9 |url1 
2 | 28/9 |url2 

新しい表:

Id | Ref-Id | T-Id 
-------------------------- 
1 | 1 | 1 
2 | 2 | 1 
3 | 3 | 1 
4 | 1 | 2 
5 | 3 | 2 
1

あなたがそれを行うべきではありませんまず第一に。 あなたはそのようなデータをMySQLに保存すべきではありません。行には、複数の値がコンマ、スペースなどで区切られて保存されている列は使用できません。むしろ、そのようなデータを複数の行に分ける必要があります。これにより、任意の行を簡単に検索、更新、削除することができます。

しかし、そのようなデータを保存したい場合は、JSONデータ型にする必要があります。 MySQL 5.7.8以降、MySQLはJSON(JavaScript Object Notation)ドキュメントのデータに効率的にアクセスできるネイティブなJSONデータ型をサポートしています。

JSON配列を使用して保存できます。 A JSONアレイ内のカンマで区切られ且つ囲ま値のリスト【と】文字を含む:

["abc", 10, null, true, false] 

テーブルEX作成:

CREATE TABLE `book` (
    `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, 
    `title` varchar(200) NOT NULL, 
    `tags` json DEFAULT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB; 

挿入データEX:そこ

INSERT INTO `book` (`title`, `tags`) 
    VALUES (
    'ECMAScript 2015: A SitePoint Anthology', 
    '["JavaScript", "ES2015", "JSON"]' 
); 

をJSONデータ型を処理するMySqlの多くのネイティブ関数です。

How to Use JSON Data Fields in MySQL Databases

リファラは、@ rbr94により示唆されるように、あなたが行うことができます多くの属性を持つ、実体である場合には

Mysql JSON Data Type

。リファラーが複数の属性を持たない場合は、複数の行にデータを分割するか、JSON DataTypeを使用してジョブを行います。 最後に、あなたのソリューションの選択によって異なります。

+0

なぜ "タグ"に別のテーブルを使用しないのですか?それは非常に困難です。あなたがこのようにするなら "Javascript"タグを含むすべての本を見つけるために – rbr94

+0

はい、それはまた良いアイデアです。しかし、彼はJSONデータを使ってデータを検索することができます。 – t9toqwerty

+1

私は今までこの方法を知らない。しかしそれは私にとっても論理的なようです。 – rbr94

関連する問題