我正在尝试做一些我认为相当棘手并且无法绕开它的事情。有点让我发疯。似乎它应该比它更容易。
所以我有两张桌子。我随机显示两个项目。当您选择一个项目时,它会作为对该项目的投票进入数据库,其中item ID
存储在win_id
列中,另一个项目进入该lst_id
列。然后它显示另外两个随机项目,依此类推。现在我的问题是,一旦他们选择了一个项目,我就不希望这两对再次显示给该用户。但是,这些项目可以与其他未投票反对的项目一起显示。希望这是从那时起。这是我尝试失败的查询。
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 表中,但仍然与其他未一起显示的项目一起随机选择。
这是表格
战斗条目
----------------------------------------------------
| 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.
现在下次它进行随机选择以显示另外两个项目时,我不希望这两个项目再次显示为 a pair
,但每个项目都可以显示为另一个尚未进入 Battle_votes 表的项目作为 a pair
。我知道这可能会令人困惑。
基本上我不希望同一对再次一起出现,如果他们选择了任何一个项目。