1

ここで達成しようとしていることはそれほど難しいことではありませんでした。実行中に間違ったことは何もわかりませんが、結果セットから否定されるべきいくつかの結果が得られています。

これは携帯電話で書いているので、手で書いている間は失礼します。

このテーブルは「リクエスト」と呼ばれ、プログラムではユーザーがサインアップしてリクエストを受け入れることができます。クライアントによる特定の要求は、既に要求を受け入れたユーザーから非表示にすることです。

キャッチ 22 は次のとおりです。リクエストは別のテーブルの特定のエンティティに基づいており、ベース エンティティごとに複数のリクエストを投稿できます。基本的に、システムから上記のエンティティの重複を削除します。これを処理する適切な方法は、一意の ID、リクエスタのアカウント ID、エンティティのエンティティ ID を含むリクエストとして知られる新しい連想行を作成することであると考えました。 request は、利用可能なリクエストの特定の行のアクセプターのアカウント ID フィールドに基づいています。

ご覧のとおり、説明がややこしくなり始めていますが、これはかなり遅い変更であり、この段階でシステムを変更する余裕がないことに注意してください。

だから、私が最もよく覚えているクエリは次のとおりです。

SELECT * FROM リクエスト WHERE 完了 = 0 AND entity_id != ANY (SELECT GROUP_CONCAT(entity_id) WHERE Accepted_account_id = '8')

8 はシステム内の私のアカウント ID です。システムには 8 つのベース エンティティがあり (すべて同じアカウントから投稿され、7)、それらのエンティティのうちの 2 つはそれらに基づいたリクエストを持ち、最初のエンティティには 4 つのリクエストがあり、2 つ目のエンティティには 16 のリクエストがあります。リクエスト。したがって、リクエスト テーブルには 20 のリクエスト行があります。ユーザーとして、システム内の両方のエンティティで 1 つの要求を受け入れました。したがって、要求テーブルの 2 つの行では、1 の RequestID と 8 のアクセプター アカウント ID を持つエンティティ ID 1 と 8 のアクセプター アカウント ID を持つエンティティ ID 3 を持つ 5 の RequestID

他のすべての行には、acceptor_account_id の null フィールドが含まれています。

同じクエリで行われているページネーションを台無しにしないように、結果セットからentity_ids全体を単純に否定しようとしています(クエリを分離することに興味はありません.150%肯定的です. 1 つのクエリ)

緊急なので誰か質問があれば教えてください:(

4

1 に答える 1

1

SELECT * FROM requests WHERE completed = 0 AND entity_id NOT IN (SELECT entity_id WHERE accepted_account_id = '8' GROUP BY entity_id)

于 2012-09-22T05:21:21.190 に答える