2017-09-21 9 views
0

私は多くの異なる投稿について毎日データを取得するクエリを持っています。それを各投稿ごとに挿入する前に、データがその投稿の前日と同じでないかどうかチェックしたいと思います。値のmysqlデータベースにデータを挿入するだけではありません

表のpost_metrics:

| id | date  | value1 | value2 | etc... 
| 123 | 2017-01-10 | 20  | 50  | more columns 
| 123 | 2017-01-11 | 40  | 80  | more columns 
| 124 | 2017-01-10 | 100 | 600 | more columns 
| 124 | 2017-01-11 | 410 | 800 | more columns 

ので、システムはそれがVALUE1は40(前日と同じではありませんかどうかを確認する必要がありますID 123とポストのために2017年1月12日のためにデータを挿入しようと言うことができます)

私は正しい方向に私を得たと思います。このスタックの答えが見つかりました:これが示唆された MySQL: Insert record if not exists in tableいるが()私の例テーブルに合わせて、それを書き直し:

INSERT INTO `post_metrics` (`id`, `date`, `value1`, `value2`) 
SELECT * FROM (SELECT 123, now() 113, 84344, now()) AS tmp 
WHERE NOT EXISTS (
    SELECT `id`, `value1` FROM `post_metrics` WHERE `id` = 10156753760478438 AND `value1` = 84344 
) 

は今、これは素晴らしい作品と私​​は、この問題を見つけるdidntの場合は仕事をしていません:

私の実際のクエリ:

Duplicate column name '0'

複数の値から来ている:これはエラーを返します

INSERT INTO `post metrics minutes` (`date updated`, `impressions`, `reach`, `fan reach`, `viral reach`, `consumptions`, `consumers`, `engaged users`, `engaged fans`, `engagements`, `storytellers`, `negative feedbacks`, `video views`, `hours video view time`, `video length (sec)`, `video avg time watched`, `content quality`, `type alignment`, `neg.fdbck.rate unweighted`, `eng.rate unweighted`, `video completion rate unweighted`, `post id`) 
SELECT * FROM ( 
    SELECT now(), 94997, 61475, 87611, 5382, 2677, 1818, 2052, 1890, 577, 540, 53, 21955, 0, 959.13, 0, 'weak', 'normal rates', 0.00086213908092721, 0.0093859292395283, 0, 123) AS tmp 
WHERE NOT EXISTS (
    SELECT `post id`, `impressions` FROM `post metrics minutes` WHERE `post id` = 123 AND `impressions` = 94997) 

ゼロ私は行3で選択しようとします。これをどのように修正することができますか?

+1

' '今()'' - 'NOW()は'関数でありますなぜ文字列リテラルとして使用していますか?ここで列シフトの問題のようです。編集:あなたの編集を見て、これはオリジナルの投稿https://stackoverflow.com/revisions/46346437/1に基づいていました - 私たちは編集中ですか? –

+0

それは本当に良い点ですが、問題ではありません;)(質問でそれを修正しました) –

+0

ええ、それは私にとっても新しいことでした。あなたがそれを把握したい場合は、私の投稿に含まれている質問と回答を見てください! https://stackoverflow.com/questions/3164505/mysql-insert-record-if-not-exists-in-table –

答えて

2

サブクエリからエイリアスtmpを作成したので、名前が割り当てられていないと、列名はデフォルトで値から派生しています。同じ値を複数回使用すると、派生した列名は同じになります。

あなたがする必要があるのは、副問合せの列に名前を付けることである(また、コードは少し読みやすくなります):

INSERT INTO `post metrics minutes` (`date updated`, `impressions`, `reach`, `fan reach`, `viral reach`, `consumptions`, `consumers`, `engaged users`, `engaged fans`, `engagements`, `storytellers`, `negative feedbacks`, `video views`, `hours video view time`, `video length (sec)`, `video avg time watched`, `content quality`, `type alignment`, `neg.fdbck.rate unweighted`, `eng.rate unweighted`, `video completion rate unweighted`, `post id`) 
SELECT * FROM ( 
    SELECT 
    now() as 'date updated', 
    94997 as 'impressions', 
    61475 as 'reach', 
    87611 as 'fan reach', 
    5382 as 'viral reach', 
    2677 as 'consumptions', 
    1818 as 'consumers', 
    2052 as 'engaged users', 
    1890 as 'engaged fans', 
    577 as 'engagements', 
    540 as 'storytellers', 
    53 as 'negative feedbacks', 
    21955 as 'video views', 
    0 as 'hours video view time', 
    959.13 as 'video length (sec)', 
    0 as 'video avg time watched', 
    'weak' as 'content quality', 
    'normal rates' as 'type alignment', 
    0.00086213908092721 as 'neg.fdbck.rate unweighted', 
    0.0093859292395283 as 'eng.rate unweighted', 
    0 as 'video completion rate unweighted', 
    123 as'post id' 
) AS tmp 
WHERE NOT EXISTS (
SELECT * 
FROM `post metrics minutes` 
WHERE `post id` = 123 AND `impressions` = 94997 
) 
関連する問題