【发布时间】:2009-07-31 06:03:24
【问题描述】:
我目前有一个 MySQL SELECT 语句,它从两个表中提取信息以显示用于私人消息传递的“已发送消息”字段。
我想知道如何在我的查询中添加一个 COUNT 来计算一个线程中“接收者”的数量。
这是我的表结构的基本要点,(注意:两个表之间的关系是 pm-info 中的“message-id”和 pm_data 中的“id”):
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 个用户,则不会打印出所有 30 个名称。
谢谢!
【问题讨论】:
-
注意 group_concat 由于其返回值的长度而受到的限制。