我在这个 SQL Fiddle 中放了一些信息:http ://www.sqlfiddle.com/#!2/0745c0/4/0 你会看到表结构和我的请求。
SELECT
cov.id AS cov_id,
cov.utilisateurs_uid AS cov_uid,
cov.timestamp_created as timestamp,
cov.invisible as invisible,
COALESCE(numreports, 0) AS numreports
FROM
cforge_covers AS cov
LEFT OUTER JOIN cforge_votes AS vot ON cov.id = vot.covers_id AND vot.utilisateurs_uid != 123456789
LEFT JOIN (SELECT rep.covers_id,
COUNT(rep.id) AS numreports
FROM cforge_reports AS rep
GROUP BY rep.covers_id) reports ON reports.covers_id = cov.id
WHERE invisible=0 AND (numreports < 2 OR numreports IS null OR valide > 0) AND cov.timestamp_created > '1370815140' AND cov.timestamp_created < '1373493540' GROUP BY cov.id
ORDER BY rand() DESC LIMIT 0,2
当用户创建图片时,会在 cforge_covers 中创建一行,其中包含他的 Facebook UID、图片 ID 和时间戳。
每个用户可以对封面图片进行一次投票,并且投票存储在 cforge_votes 中,您可以在其中多次拥有相同的covers_id,并且每个covers_id 最多只能使用一次utilisateurs_uid(users_id)。
封面图片也可以与投票相同的基础上报告:每个用户一次。
我请求的目的是获取:
- 两个随机封面
- 尚未报告或审核(存储在 cforge_reports 中的值)
- 用户尚未投票的
最后一部分导致了我的问题:我尝试排除特定的 utilisateurs_uid,但由于许多用户为图像投票,因此即使用户已经投票,其他对封面的投票也使其有效显示。
我怎样才能更好地写这个请求?
在此先感谢您的时间 !