我有以下表格:
conversation_folder {
conversation_folder_id,
user_id
...
}
conversation_user {
conversation_id
owner_user_id
is_unread
}
conversation_folder_relations {
conversation_id
conversation_folder_id
user_id
}
我想从
conversation_folder
表中选择记录,但是我想为特定的user_id
(owner_user_id
中的conversation_user
)包括未读取的文件夹中的会话数。 >表格)。一个查询是否可行,还是我必须先获取文件夹,然后运行另一个查询才能获取未读计数?
编辑:
为了增加显而易见性,此查询提供了所需的结果,但涉及多个子查询,这与理想情况相去甚远:
SELECT conversation_folder.*,
(
SELECT COUNT(conversation_id)
FROM conversation_user
WHERE conversation_id IN (
SELECT conversation_id
FROM conversation_folder_relations
WHERE conversation_folder_relations.user_id = conversation_user.owner_user_id
AND conversation_folder_id = conversation_folder.conversation_folder_id
)
AND is_unread = 1
) AS unread_count
FROM conversation_folder
WHERE conversation_folder.user_id = ?
最佳答案
最好分别查询两者。也可以通过联接user_id和owner_user_id列,然后对结果表进行计数来解决。但是,在SqlServer上使用不佳时,联接的性能极差,这可能与MySql不同。由于我仅使用SqlServer,因此未经测试。
SELECT count(conversation_id)
FROM conversation_user
INNER JOIN conversation_folder_relations
ON conversation_user.owner_user_id = conversation_folder_relations.user_id;
http://www.w3schools.com/sql/sql_join_inner.asp
关于mysql - 根据来自其他表的ID对字段值进行计数来计算来自其他表的行数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33569527/