这看起来很有趣。
假设三个表,users
、items
和一个连接表users_items
。后者将 users.id
链接到 items.id
。当 users_items
表中有一行包含对 (U.id
, I.id
).
现在:我将如何随机选择特定用户尚未拥有的项目?
最可行的解决方案似乎是:
- 收集所有项目
id
。 - 收集用户
U
拥有的项目的id
。 - 从#1 中生成的集合中删除步骤#2 中的所有
id
- 从结果集中选择随机元素(简单)
这是唯一明智的方法吗?它是最优的吗?让我们假设这将是一个经常使用的功能。而且每个表中的元素数量都很大。
有什么有趣的想法吗?
最佳答案
您可以使用左连接生成用户当前不拥有的项目 ID 列表:
SELECT i.id
FROM items i
LEFT JOIN users_items ui ON ( i.id = ui.item_id AND ui.users_id = 2 )
WHERE ui.item_id IS NULL;
从这里,您可以从结果集中随机选择一个元素。
关于database - 随机选择尚未在连接表中的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10729020/