ユーザーが監査目的で画像をアップロードできるWebサイトがあります。ユーザーは最初に監査を作成します。この監査には、auditIDの乱数と、監査テーブルに格納されているdateStart(ユーザーが選択した日付がDATETIMEではなくDATEとして格納されます)が含まれます。次に、アップロードする画像を選択します。この画像には、ID(imageID)と、サーバー上のファイルパス(imageLocation)、および画像テーブルに保存される常に「標準」のタイプが割り当てられます。auditIDは、イメージテーブルの外部キーです。
同じイメージが別の監査に再利用される場合、データベース内に、以前と同じ値、新しいimageID、および新しいdateStartを持つ新しいauditIDを持つ別のエントリが作成されます。
次に、これらの画像は、画像をそのimageLocationでグループ化するスクリプトを使用して表示されるため、各画像の1つのインスタンスが、MAX(dateStart)を使用して最後に使用された監査の名前とともに表示されます。
これは、ユーザーが同じdateStartの複数の監査に同じ画像を使用しない限り、うまく機能します。その場合、同じ日付の監査ごとに1回ずつ、複数回表示されます。最も簡単な方法は、dateStartをdateからdatetimeに変更することですが、これは実行可能なオプションではないため、次善の策は、MAX(dateStart)だけでなくMAX(imageID)も見つけることです。
GROUPの後にSORTBYi.imageID LIMIT 1 DESCを追加しようとしましたが、各画像の最新のインスタンスではなく、1つの画像のみが返されます。
これは私がこれまでに持っているものです...
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が最も高い画像のインスタンスが必要です。
これで十分な情報だといいのですが、テーブルはかなり複雑ですが、必要に応じてそれらとサンプルデータを提供できますが、しばらく時間がかかります。
どんな助けでも大歓迎です。