我有一个网站,允许用户上传图像以进行审核。用户首先创建一个审计,它有一个随机数作为 auditID 和一个 dateStart(用户选择的日期,存储为 DATE 而不是 DATETIME)存储在审计表中。然后他们选择要上传的图像,然后为其分配一个 ID (imageID) 和它在服务器上的文件路径 (imageLocation) 和一个始终为“标准”的类型,该类型存储在图像表中。auditID 是图像表中的外键。
如果相同的图像被重新用于另一次审计,则在数据库中为其创建另一个条目,该条目具有与以前相同的值,只是一个新的 imageID 和一个具有新 dateStart 的新 auditID。
然后通过使用按其 imageLocation 对图像进行分组的脚本来显示这些图像,以便显示每个图像的一个实例以及使用 MAX(dateStart) 进行的最后一次审核的名称。
这很有效,除非用户使用相同的图像进行具有相同 dateStart 的多个审核,在这种情况下,它会显示多次,每次审核在同一日期显示一次。最简单的做法是将 dateStart 从 date 更改为 datetime,但这不是一个可行的选择,因此下一个最好的方法是不仅要找到 MAX(dateStart),还要找到 MAX(imageID)。
我尝试在 GROUP 之后添加 SORT BY i.imageID LIMIT 1 DESC 但它只返回一个图像而不是每个图像的最新实例。
这是我目前所拥有的......
SELECT i.imageID AS newest_image,
i.userID AS image_userID,
i.auditID AS image_auditID,
i.type AS image_type,
i.imageLocation AS location,
a.*
FROM image i
JOIN audit a
ON i.auditID = a.auditID
JOIN
(
SELECT i.imageLocation, MAX(a.dateStart) MaxDate
FROM image i
JOIN audit a
ON i.auditID = a.auditID
WHERE i.userID = '$id'
AND i.type = 'standard'
GROUP BY i.imageLocation
)
g ON g.MaxDate = a.dateStart
AND g.imageLocation = i.imageLocation
WHERE i.userID = '$id'
AND i.type = 'standard'
AND i.imageLocation NOT LIKE '%standard_examples%'"
我希望它返回与现在相同的结果,但如果在同一日期多次使用同一图像,那么我想要具有最高 imageID 的图像实例。
我希望这是足够的信息,表格非常复杂,但如果需要,我可以提供它们和示例数据,但这需要一段时间。
任何帮助将不胜感激。