2013-03-22 2 views
1

Я создаю фид активности, отображающий активность моих пользователей, ограниченную последними 5 строками.Выделить все столбцы из таблицы, где каждый user_id отличается

SELECT * FROM activity ORDER BY date desc LIMIT 5 

Проблема заключается в том, я не хочу, чтобы кормить деятельность будет завален тем же пользователем в любой момент, поэтому я хочу, чтобы получить 5 последних результатов, где user_id являются отличными друг от друга.

Как я мог это сделать?

+2

Вы пытаетесь получить последние 5 записей 'DISTINCT'? – Kermit

+0

см. Http://dev.mysql.com/doc/refman/5.0/en/distinct-optimization.html – SachinGutte

ответ

1

Если нет множественного max(date) для каждого пользователя, вы можете использовать это:

SELECT * 
FROM activity 
WHERE (user_id, `date`) IN (
    SELECT * FROM (
    SELECT user_id, max(`date`) 
    FROM  activity 
    GROUP BY user_id 
    ORDER BY max(`date`) DESC 
    LIMIT 5) s 
) 
ORDER BY `date` DESC 

Пожалуйста см. скрипку here.

+0

Отлично! Именно то, что мне нужно, спасибо. –

1

Это должно работать:

SELECT user_id, MAX(date) FROM activity GROUP BY user_id ORDER BY date DESC LIMIT 5

+0

Это лучший подход. – ljh

0

Это может помочь вам.

SELECT * FROM activity GROUP BY user ORDER BY date DESC LIMIT 5 
0

Попробуйте этот запрос, SELECT DISTINCT * FROM деятельности Сортировать по дате по убыванию LIMIT 5

Смежные вопросы