【发布时间】:2013-01-23 01:23:13
【问题描述】:
好吧,我今天一整天都在琢磨这个问题,无法让它工作,基本上我试图从一个临时表中随机查询 12 张照片,其中包含所有活跃的登录用户尚未投票的照片开。
错误很明显是#1137 - Can't reboot table: 'r1' which temp table can only be reference once.
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
【问题讨论】:
-
hm,我可以建议使用
SELECT ... FROM photo WHERE photo_uid NOT IN ( voted images subquery ) ORDER BY RAND() LIMIT 12吗?应该做的伎俩,即使没有临时表 -
@Najzero 。 . .您应该将其发布为解决方案。
-
@Najzero 当然可以,但我有点需要随机选择查询部分来解决性能问题。您可以点击此链接并查看底部的“性能”比较:jan.kneschke.de/projects/mysql/order-by-rand
-
@jerrytouille 嗯,是的,也考虑了性能,但无法计算出创建临时文件的速度要快得多(我无法访问您发布的公司防火墙链接)。看看这里:stackoverflow.com/questions/1244555/… 接受的答案看起来很可靠
-
@Najzero 不错的链接,但它与我的 OP 中的“示例”超链接大致相同。我的问题是 unvoted_photos 表引用,它是从顶部创建的临时表。有没有办法将这两个部分结合起来,所以我不需要临时 unvoted_photos 表?
标签: mysql sql database-design phpmyadmin relational-database