Получение последнего идентификатора пользователя (MySQL) - PullRequest
1 голос
/ 24 октября 2010

У меня есть небольшая проблема - я мог бы получить с этим запросом количество сообщений и идентификатор последнего сообщения, но я не могу понять, как получить правильный идентификатор пользователя.Я получаю первый пост (самый низкий идентификатор) идентификатор пользователя, но я хочу последнее сообщение ... Я пытался добавить "ORDER BY id DESC", но это не поможет.Есть идеи как это сделать?

SELECT 
    COUNT(`id`) AS `count`, 
    MAX(`id`) AS `last_post_id`, 
    `topic_id`, 
    `user_id` 
FROM `forum_posts` 
WHERE `topic_id` IN (326, 207, 251) 
GROUP BY `topic_id` 

Ответы [ 2 ]

1 голос
/ 24 октября 2010

Вы должны использовать ORDER BY для отметки времени, которую вы храните в базе данных при создании публикации. Это обеспечит сортировку сообщений по времени, а не по идентификатору, поскольку при удалении / добавлении сообщений идентификатор может быть испорчен.

0 голосов
/ 24 октября 2010

В вашем запросе userid возвращает идентификатор пользователя любой идентификатор пользователя в этой группе, который обычно будет первым, который появится в любом индексе, выбранном оптимизатором, но это не обязательно .

Самостоятельное присоединение для извлечения user_id из строки с идентификатором, который вас интересует:

SELECT T1.`count`, T1.last_post_id, T1.topic_id, T2.user_id
FROM (
    SELECT 
        COUNT(id) AS `count`,
        MAX(id) AS last_post_id,
        topic_id, 
    FROM forum_posts
    WHERE topic_id IN (326, 207, 251) 
    GROUP BY topic_id
) T1
JOIN forum_posts T2
ON T1.last_post_id = T2.id
...