我试图从表格中获取一组收藏品而我无法弄清楚如何从相关表格中计算喜欢的数量' 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
答案 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