好的,我今天整天都在试着这个问题并且无法解决这个问题,基本上我试图从临时表中随机查询12张照片,其中包含活动登录的所有照片用户尚未投票。
错误显然是#1137 - 无法重新打开表:' r1' 哪个临时表只能引用一次。
CREATE TEMPORARY TABLE unvoted_photos
SELECT *
FROM photo
WHERE photo.photo_uid
NOT IN
( SELECT photo_uid
FROM vote
WHERE vote.user_uid = '12345' ) ;
SELECT photo_uid, caption, storage_path
FROM unvoted_photos AS r1
JOIN (SELECT (RAND() *
(SELECT MAX(id)
FROM unvoted_photos)) AS sid)
AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT 12;
由于性能问题,随机选择查询遵循此example。否则这肯定会奏效。
SELECT ... FROM photo WHERE photo_uid NOT IN ( voted images subquery ) ORDER BY RAND() LIMIT 12
答案 0 :(得分:0)
在对问题的讨论中,这是一种将两者合并在一起的方法,你应该能够立即运行。我用JOIN
s重写了这个,但是在这种情况下我将临时表放到子查询中,这样你就可以看到发生了什么。
SELECT photo_uid, caption, storage_path
FROM (
SELECT photo_uid, caption, storage_path
FROM photo
WHERE photo.photo_uid
NOT IN
(
SELECT photo_uid
FROM vote
WHERE vote.user_uid = '12345'
)
) r1
JOIN (SELECT (RAND() *
(SELECT MAX(id)
FROM unvoted_photos)) AS sid)
AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT 12;