わかりました。今日は一日中頭を悩ませましたが、これを機能させることができません。基本的に、アクティブなログインユーザーがまだ投票していないすべての写真を含む一時テーブルからランダムに12枚の写真をクエリしようとしています。
エラーは明らかに#1137です-テーブルを再度開くことはできません:'r1'この一時テーブルは1回しか参照できません。
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;
パフォーマンスの問題により、ランダム選択クエリはこの例に従いました。そうでなければ、これは確かに機能します。
SELECT ... FROM photo WHERE photo_uid NOT IN ( voted images subquery ) ORDER BY RAND() LIMIT 12