に参加するために行を持っていない、と私たちは、それぞれ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;
列: