【发布时间】:2010-09-03 06:41:57
【问题描述】:
我有一个大约 3500 项的表。在另一个表中,我存储了用户投票 - 项目 ID、用户 ID 和分数。当用户点击这个脚本时,它必须随机选择一个他们还没有投票过的项目。
目前我正在使用 LEFT JOIN 然后测试 null 以找到他们没有投票的项目集。问题是,在派生表上使用 ORDER BY RAND() 会导致内存问题,因为派生集被复制到临时表进行排序。
SELECT i.id
FROM items i
LEFT JOIN (
SELECT id
FROM votes
WHERE voter_id=X
) v
ON i.id=v.id
WHERE v.id IS NULL
ORDER BY RAND()
LIMIT 1
items 表并不大,但是很多人同时点击这个脚本(其中许多人多次重新访问同一个页面)MySQL 正在苦苦挣扎。
常见的替代方案(选择低于 MAX() 的随机 id)不起作用 - 还有其他方法吗?我最好返回整个结果集并使用 PHP 随机选择一个?
【问题讨论】: