У меня есть система обзора на моем сайте, где пользователи (профили) могут оставлять отзывы для других. Эта часть работает нормально.mySQL заказать и отличные
Но на моей домашней странице я хочу, чтобы получить 10 из последних обзоров, но я не хочу, чтобы дублировать любые пользователей/профилей (например, если пользователь имеет 2 отзыва я хочу только самые последние)
Добавление DISTINCT не делает этого, поскольку все обзоры/строки уникальны. (я действительно добавляю DISTINCT, хотя, поскольку некоторые пользователи представляют повторяющиеся обзоры ...)
Я пробовал GROUP BY ProfileID, но это не обязательно возвращает самый последний обзор, и я не могу решить, как это сделать. (эффект GROUP BY имеет желаемый эффект, но я думаю, что может смешивать данные и не получать результаты в порядке дат).
Ниже (упрощенный) SQL - это то, что у меня есть, но это возвращает более 1 отзыв на одного пользователя (если они имеют более чем 1)
SELECT DISTINCT LEFT(r.ReviewText, 100) as Review, r.ReviewRating, r.ReviewDate,
p.ProfileName, p.Location, p.ProfileID,
((date_format(now(),'%Y') - date_format(p.DateOfBirth,'%Y')) - (date_format(now(),'00-%m-%d') < date_format(p.DateOfBirth,'00-%m-%d'))) AS Age
FROM tReview r
INNER JOIN tProfiles p ON p.ProfileID = r.tProfiles_ProfileID
WHERE r.ReviewWithdrawn = 0
AND r.ReviewEnabled = 1
AND p.Enabled = 1
ORDER BY r.ReviewDate DESC
LIMIT 10
Любые идеи (без фильтрации в PHP) о том, как я могу получить 10 результатов, в хронологическом порядке, но только в том числе каждого пользователя один раз (так что если у пользователя есть 2 отзыва, только последние будут возвращены)?
Вы уже видели это сообщение? http://stackoverflow.com/questions/6841605/get-top-1-row-of-each-group –
@RandykaYudhistira спасибо, звучит так же, как и мне, хотя они объяснили это лучше, чем я. Еще раз спасибо! – Ford
@RandykaYudhistira спасибо, но я не могу получить какой-либо метод для работы для меня :-( – Ford