Это сложно, потому что MySQL не поддерживает предложение LIMIT для подзапросов. Если бы это было так, это было бы довольно тривиально ... Но, увы, вот мой наивный подход:
SELECT
i.UserId,
i.ImageId
FROM
UserSuppliedImages i
WHERE
/* second valid ImageId */
ImageId = (
SELECT MAX(ImageId)
FROM UserSuppliedImages
WHERE UserId = i.UserId
)
OR
/* second valid ImageId */
ImageId = (
SELECT MAX(ImageId)
FROM UserSuppliedImages
WHERE UserId = i.UserId
AND ImageId < (
SELECT MAX(ImageId)
FROM UserSuppliedImages
WHERE UserId = i.UserId
)
)
/* you get the picture...
the more "per user" images you want, the more complex this will get */
LIMIT 10;
Вы не прокомментировали наличие предпочтительного порядка результатов, поэтому при этом выбираются самые последние изображения (при условии, что ImageId
является возрастающим автоматически увеличивающимся значением).
Для сравнения, на SQL Server то же самое будет выглядеть так:
SELECT TOP 10
img.ImageId,
img.ImagePath,
img.UserId
FROM
UserSuppliedImages img
WHERE
ImageId IN (
SELECT TOP 3 ImageId
FROM UserSuppliedImages
WHERE UserId = img.UserId
)