这看起来很有趣。
假设有三个表,users
,items
和一个联接表users_items
。后者将users.id
链接到items.id
。当U
表格中有一行包含该对(I
,users_items
)时,我们说用户U.id
拥有商品I.id
。
现在:如何随机选择特定用户尚未拥有的项目?
最可行的解决方案似乎是:
id
s。id
拥有的U
项。id
这是唯一理智的方式吗?它是最佳的吗?让我们假设这将是一个使用频繁的功能。每张表中的元素数量都很大。
有趣的想法,想法?
答案 0 :(得分:2)
您可以使用左连接来生成用户目前不拥有的项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;
从这里,您可以随机选择结果集中的一个元素。
答案 1 :(得分:0)
为什么不随机化sql,以便在一个查询中完成。我不确定你是否使用mysql,tsql或其他东西,但使用ORDER BY RAND() LIMIT 1
提到了this question。这样的事情怎么样:
select i.itemName
from users as s
left join items as i
on i.id not in
(select ui.itemID from users_items as ui where ui.userID = u.id)
order by rand()
limit 1