2012-01-23 11 views
0

次のクエリがあり、クエリの条件がWHEREでない受信者IDのランダム通知エントリが作成されることがあります。ランダムな挿入の原因となるクエリのWHERE部分に何が問題になっていますか?MySQL Coalesceクエリでランダム挿入が発生していますか?

INSERT INTO 
    notification (text, 
     type, 
     target_id, 
     sender_id, 
     recipient_id, 
     data, 
     timestamp, 
     is_unread) 
    SELECT DISTINCT '$text', 
     'comment', 
     '$id', 
     '$senderId', 
     COALESCE(comment.author_id, stream.author_id), 
     '$dataArray', 
     '$timestamp', 
     '1' 
    FROM 
     stream, 
     comment 
    WHERE 
     (comment.author_id != '$senderId' AND comment.target_id = '$id') 
     OR (stream.author_id != '$senderId' AND stream.id = '$id') 
+1

あなたの質問は何ですか? –

+0

ランダムな挿入を引き起こすクエリのどこの部分に問題がありますか? –

+0

@BraydonBatungbacal私たちは、推測するために 'WHERE'節で補間されるPHP変数の例を見る必要があります。おそらく、それは問題を引き起こすように設計したクエリではなく、 '$ senderId、$ id'または他の変数の値によって問題を引き起こします。 –

答えて

2

あなたは何のあなたのstreamcommentテーブル間の結合条件なかったです。デカルト積を効率的に生成しているため、streamの行はcommentとは無関係で、その逆の場合もあります。

JOINの構文を使用し、2つのテーブルの行を関連付ける条件を宣言することをお勧めします。

関連する問題