私はかなりトリッキーだと思うことをやろうとしていますが、頭を包むことはできません。ちょっと私を狂わせる。それよりも簡単なはずです。
だから私は2つのテーブルを持っています。ランダムに2点まとめて展示しております。アイテムを選択すると、そのアイテムの投票としてDBに入力され、列にitem ID
保存されwin_id
、他のアイテムがlst_id
列に入ります。次に、さらに 2 つのランダムなアイテムが表示されます。今私の問題は、彼らがアイテムを選択すると、その2つのペアがそのユーザーに再び表示されることを決して望まないことです. ただし、反対票が投じられていない他のアイテムと一緒にアイテムを表示することはできます。これがそれ以来うまくいっていることを願っています。これは私が失敗したクエリです。
SELECT * FROM (SELECT be.media_id FROM battle_entries as be
WHERE be.btype=1 AND be.mature=1 AND be.mem_id!=1
AND NOT EXISTS (SELECT * FROM battle_votes as bv
WHERE bv.win_id = be.media_id AND bv.mem_id=1 AND bv.lst_id=be.media_id)) s ORDER BY RANDOM() LIMIT 2";
win_id
と は、lst_id
ユーザーが選択したペアです。それらが同じユーザーによって Battle_votes テーブルに存在しているが、一緒に表示されていない他のアイテムと一緒にランダムに選択されている場合、これらの 2 つが同じユーザーに再び表示されることは決してありません。
ここにテーブルがあります
バトルエントリー
----------------------------------------------------
| btl_id | mem_id | posted | media_id | active |
----------------------------------------------------
バトル_投票
----------------------------------------------------
| btl_id | mem_id | win_id | lst_id | posted |
----------------------------------------------------
別のスキーマでそれを行うためのより良い方法がある場合、これが不可能な場合はそれも受け入れます。
編集: もう一度説明できるのが最善です。
私のクエリは、ユーザーが投票していない 2 つのランダムなアイテムを選択します。ユーザーがいずれかを選択すると、battle_votes テーブルに新しい行が作成されます。選択されたものは列item ID
に入力され、win_id
選択されなかったものは列に入力されlst_id
ます。This is a single row.
次にランダム選択を行ってさらに 2 つのアイテムを表示するときに、それらの 2 つを として再度表示したくありませんpair
が、それぞれを、battle_votes テーブルに として入力されていない別のアイテムとともに表示できますpair
。私はそれが混乱するかもしれないことを知っています。
基本的に、どちらかのアイテムを選択した場合、同じペアが再び一緒に表示されることは望んでいません。