MySQL Select - объединить COUNT с GROUP_CONCAT - PullRequest
0 голосов
/ 31 июля 2009

В настоящее время у меня есть оператор MySQL SELECT, который извлекает информацию из двух таблиц для отображения поля «Отправленные сообщения» для личных сообщений.

Я хотел бы знать, как я могу добавить COUNT в свой запрос, чтобы подсчитать количество «получателей» в одном потоке.

Вот основная суть структуры моей таблицы (ПРИМЕЧАНИЕ: реляционная связь между двумя таблицами - это «идентификатор сообщения» в pm-info и «id» в pm_data):

pm_info:
   id     message_id    receiver_id    is_read     read_date

pm_data:
   id    date_sent    title    sender_id    thread_id    content

Вот мое утверждение SELECT:

SELECT pm_info.is_read, group_concat(DISTINCT receiver.usrFirst) as receiver_name,
pm_data.date_sent, pm_data.title, pm_data.thread_id, pm_data.id as data_id,
MAX(date_sent) AS thread_max_date_sent
FROM pm_info
INNER JOIN pm_data ON pm_info.message_id = pm_data.id
INNER JOIN tblUsers AS receiver ON pm_info.receiver_id = receiver.usrID
WHERE pm_data.sender_id = '$usrID'
GROUP BY pm_data.thread_id
ORDER BY thread_max_date_sent DESC

И выводит получателей так:

Message 1 - Recipients: John, David, Steve - thread_id = 1234
Message 2 - Recipients: Bill, David, John, Ed, Steve - thread_id = 1345

По сути, я хотел бы иметь возможность СЧИТАТЬ получателей, поэтому в приведенном выше примере «Сообщение 1» будет отображать три (3) получателя, а «Сообщение 2» будет отображать пять (5) получатели.

Таким образом, если у меня есть ветка / сообщение, отправленное 30 пользователям, будут напечатаны не все тридцать имен.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 03 августа 2009

Вы пробовали просто заменить GROUP_CONCAT на COUNT? Как это:

COUNT(DISTINCT receiver.usrFirst) as receiver_count

Или, лучше, используйте pm_info.receiver_id как в (что потенциально может позволить вам исключить одно из ваших объединений):

COUNT(DISTINCT pm_info.receiver_id) as receiver_count
0 голосов
/ 10 августа 2009

Вы можете переместить count и group_concat в оператор concat.

... group_concat(DISTINCT receiver.usrFirst) as receiver_name ...

становится

... concat('messages:', count(distinct receiver.usrFirst),'(',group_concat(DISTINCT receiver.usrFirst),')') as receiver_name ...
0 голосов
/ 31 июля 2009

Вы можете использовать подзапрос для выбора до 3 получателей на сообщение, а затем другой подзапрос для объединения их имен:

select 
    (   select group_concat(usrFirst separator ', ') 
        from tblUsers
        where usrId in (
            select usrId
            from tblUsers
            where usrId = pm_info.receiver_id
            limit 3
        )
    ) as receiver_name
 from pm_info
 ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...