2016-06-24 8 views
1

に参加するために行を持っていない、と私たちは、それぞれmessage行挿入は、私たちがメッセージを保持<code>messages</code>テーブルを持っている

messagesで、ユーザーの個々の相互作用を保持しているmessage_statusesテーブルを持っていますテーブルには、ユーザーがアプリ内で見るべきメッセージがあります。 GoogleのAPIからのGETメッセージの場合、ユーザーのIDとそのテーブルの読み取り/表示ステータスを追跡する新しい行をmessages_statusテーブルに作成して、メッセージと天気を表示するかどうかを判断するか、それをマークしないかを判断できます表示されないようにして通知のバブルを表示します。

我々は、ユーザが取得すべきメッセージを選択すると、私はそう

SELECT * FROM messages AS a JOIN message_statuses AS b ON a.id = b.message_id;

ようmessage_idに参加することができます知っているが、新しいメッセージがある場合messagesに加えて、我々はAを追加していません新しい行をmessage_statusesテーブルに追加すると、そのユーザーの対話のトラッキングが開始され、messageとなります。新しい行を追加して、開いた状態や読み込んだ状態、削除した状態を追跡できます。

補助クエリを使用してその結合で選択するだけでなく、message_statusesテーブルに行がないときに新しい行を挿入する方法はありますか?

私はこのページを参照してくださいhttp://dev.mysql.com/doc/refman/5.7/en/insert-select.htmlこれは私たちのために働くことができる場合、私はいくつかの問題を理解しています。

私たちはPHPを使用していますので、いくつか別々のクエリで回避することができますが、これを1つのクエリで動作させることができるかどうかは本当に不思議です。私はそれが同様にうまくいくかもしれないように見える重複キーの挿入を見たことがわかっていますが、私はそれにひどく慣れていません。

[UPDATE] SQLが

$trigger = "CREATE TRIGGER insert_status_row AFTER SELECT ON text2bid_messages 
FOR EACH ROW 
BEGIN 
    IF selected.opened IS NULL THEN 
    INSERT INTO text2bid_message_statuses (user_id, message_id) = ($user_id,selected.id); 
    END IF; 
END"; 
mysql_query($trigger); 

を実行される前に

が、私はこのトリガを追加しようとしている。しかし、これはこれまでのところ、我々は必要なものをやっているようには見えない、多分私はしましたトリガーが間違って追加された?それは多分selectでトリガーを作ることができないようですね? NULLなりmessage_statusから

SELECT * 
FROM messages m LEFT JOIN 
    message_statuses ms 
    ON m.id = ms.message_id; 

列:

答えて

1

まず、あなたはleft joinを使用してすべてメッセージを取得することができます。

新しいメッセージが作成されるたびにmessage_statusにレコードを挿入する場合は、挿入トリガーを使用してレコードを挿入できます。

関連する問題