MySQL: порядок внутри группировки? - PullRequest
2 голосов
/ 04 июля 2010

Итак, у меня есть база данных сообщений между членами моей CMS. Я хотел изменить список, чтобы показать людей вместо конкретных сообщений. Назовите это «темы», но каждая тема на странице «мои сообщения» является участником, с которым вы разговаривали, верно?

Итак, я, очевидно, делаю это примерно так:

select id, msgfrom, headline from member.msg where msgto = $myid
group by msgfrom order by date desc

Правильно, но проблема с вышесказанным в том, что он показывает заголовок ПЕРВОГО сообщения от каждого сообщения "msgfrom". Таким образом, упорядочение по дате применяется к дате первого сообщения. То есть Я хочу, чтобы вся возвращаемая строка, представляющая группу, подчинялась определенному порядку.

Это было бы уместно, если бы я должен был извлечь все тексты из базы данных и сгруппировать их по категориям и, таким образом, показать последний текст из каждой категории. Все в одном запросе.

Что еще хуже, я также хотел бы получить сообщение "нити", где другая сторона еще не ответила (поэтому пока нет msgto = $ myid, а скорее msgfrom = $ myid), и группировка должна тогда используйте "msgto" вместо "msgfrom"

Итак, есть идеи?

1 Ответ

3 голосов
/ 04 июля 2010

Это было бы уместно, если бы я должен был извлечь все тексты из базы данных и сгруппировать их по категориям и, таким образом, показать последний текст из каждой категории.Все в одном запросе.

Это классический запрос 'max per group', который возникает здесь каждый день.Есть много способов решить эту проблему, которые были рассмотрены ранее (попробуйте поиск SO ), но я приведу один пример, чтобы вы начали:

SELECT id, msgfrom, headline
FROM (
    SELECT
        id, msgfrom, headline,
        @rn := CASE WHEN @prev_msgfrom = msgfrom
                    THEN @rn + 1
                    ELSE 1
               END AS rn,
        @prev_msgfrom := msgfrom
    FROM (SELECT @prev_msgfrom := NULL) vars, member.msg
    ORDER BY msgfrom, headline DESC
) T1
WHERE rn = 1

Я неЯ действительно не понимаю вторую половину вашего вопроса.Можете ли вы объяснить это более подробно, возможно, на примере?Вы хотите, чтобы это было частью того же или отдельного запроса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...