MySQL计算INNER关系中的项目数

时间:2016-07-06 21:30:17

标签: mysql

我试图从表格中获取一组收藏品而我无法弄清楚如何从相关表格中计算喜欢的数量' like_collections'使用LEFT JOIN语法。

正如您在查询中看到的,对于每个 collection_id ,我需要获得喜欢此类收藏的用户数量。

我知道我只能使用<?php add_action( 'genesis_before_entry_content', 'state_meta' ); function state_meta() { if(genesis_custom_field('state')) { echo '<br /><strong>State</strong>: '; genesis_custom_field('state'); } } ?> ,但想知道是否可以使用以下查询。

(SELECT COUNT(*) FROM likes_collections WHERE collection_id=cn.id) as n_likes

1 个答案:

答案 0 :(得分:0)

如果您有LEFT JOIN,则不应在GROUP BY的子表中使用列。这是因为当主表中的行没有匹配时,该表中的列都将为NULL,并且它将所有这些不匹配的行组合在一起。因此,您应该GROUP BY cn.id而不是GROUP BY lc.collection_id

您可以使用子查询来计算按集合ID分组的项目数,而不是相关子查询。

SELECT  cn.id,
        cn.name,
        cn.description,
        u.avatar,
        u.username,
        COUNT(lc.id) as n_likes,
        n_items
FROM collection_names as cn 
INNER JOIN users as u ON u.ID=cn.user_id 
LEFT JOIN likes_collections as lc ON lc.collection_id=cn.id
LEFT JOIN (SELECT collection_id, COUNT(*) AS n_items
           FROM collection_items
           GROUP BY collection_id) AS ci ON ci.collection_id = cn.id
WHERE cn.public=1
GROUP BY cn.id
ORDER BY cn.published_date DESC
LIMIT 0, 5