0

みなさん、こんにちは。私はこれを何年も前から試しています。

私はここで多くの質問を読み、さまざまなソリューションを自分のニーズに適合させようとしましたが、結果はありませんでした。

歴史:

イベントにはたくさんの参加者がいます。参加者全員がイベントでお互いに会い、実際に好きな他のすべての参加者に「いいね」を出します。

イベントの最後に、管理者はそのイベントの各参加者のすべてのいいねを挿入し、システムは相互のいいね(友情)を見つけます

問題:いいねを挿入している間、天気を検出するシステムが(他のイベントからも)すでに確立されていることを望みます(しゃれ)。そうであれば、いいねを設定するときにそのユーザー名を表示しないようにします。

これが私が使用しているテーブルです(mysql)

wp_fd_users

id | user_name | user_gender | ..など

wp_fd_matches

id | event_id | event_user_id | event_user_match_id | ...など

マッチテーブルの例

1 | 1 | 1 | 3 | ...
2 | 1 | 1 | 4 | ...
3 | 1 | 2 | 6 | ...
4 | 1 | 3 | 1 | ...

ここで、1 <-> 3には相互関係があり、1は4が好きですが、相互には関係がないことがはっきりとわかります。1つのイベントで確立された関係を回避するすべての結果を返すクエリが必要になります。

このような出来事:

1 | 1 | 1 | 3 | ...
2 | 1 | 1 | 4 | ...
3 | 1 | 2 | 6 | ...
4 | 2 | 3 | 1 | ...

2つの別々のイベントで発生するため、同様のトリガーは発生しません

それが明確であることを願っています

4

1 に答える 1

0

あなたの質問は少し不明確です。「1 つのイベントで確立された関係を回避するすべての結果を返すクエリが必要です。」

次の自己結合はこれを実現します。

select m1.*
from wp_fd_matches m1 left outer join
     wp_fd_matches m2
     on m1.event_id = m2.event_id and
        m1.event_user_id = m2.event_user_match_id
        m1.event_user_match_id = m2.event_user_id
where m2.id is null

一致するレコードを探します。ただし、左外部結合を使用すると、すべてのレコードが取得されます。次に、一致するものを除外します。

于 2012-08-20T13:46:02.827 に答える