わかりました、もう一度この質問をしようと思います。私の最後の投稿は、より精巧な質問ではなかったために閉じられたので、より具体的にしようとします.
ユーザーがメッセージを受信すると、メッセージを読んだかどうかにかかわらずクリックしたかどうかに基づいてunread
、ステータスがマークされます。read
重複したメッセージを受信したと言うユーザーがいます。問題は、メッセージを追跡するレコードが 2 番目のテーブルにあることです。2つのテーブルは次のようになります
subject_table
id user_id message_id created status
1 34 81 03/11/12 read
2 34 82 06/15/12 unread
3 34 83 06/16/12 unread
4 35 84 07/10/12 read
5 35 85 07/12/12 unread
6 35 86 07/14/12 unread
7 35 87 07/14/12 unread
8 24 88 08/09/12 read
メッセージテーブル
id message
81 'welcome'
82 'welcome' //duplicate for user 34, associated table needs to be set to read
83 'welcome' //duplicate for user 34, this record needs to be set to read
84 'welcome'
85 'welcome'
86 'welcome'
87 'pretty cool' //not a duplicate for user 35
88 'welcome' // not a duplicate for user 24
この質問が最初の質問と異なるのは、ここに関連するテーブルがあることです。各テーブルを調べて、メッセージが重複しているテーブルのみを更新する必要があります。message_table のレコード 87 を参照してください。重複がないため、無視されます。
したがって、私の質問は、関連するテーブルとの重複に基づいてテーブル 1 を更新する方法です。
[編集]
重複とは、同じメッセージ値を持つメッセージが関連付けられているすべてのユーザーを意味します。例を見てください。user_id
34には3つのレコードがあります。for each レコードをmessage_id
調べると、同じメッセージ「ようこそ」が 3 回繰り返されていることがわかります。user_id
これは34の重複レコードです
以下は失敗です
UPDATE subject_table
SET `status` = 'read'
WHERE
user_id IN (
SELECT
s.user_id
FROM
subject_table s
INNER JOIN messages m ON m.id = s.message_id
WHERE
m.message LIKE '%welcome%'
GROUP BY
s.user_id
HAVING
count(s.user_id) > 1);
ここでやろうとしているのは、サブクエリで、複数の重複レコードを持つ ID のリストを取得し、関連するレコードのステータスを更新して読み取ることです。しかし、これで発生する問題は次のエラーです
Error : You can't specify target table 'subject_table' for update in FROM clause