所以我已经到处搜索这个,但我找不到这个特定的关系。下面的查询返回用户的所有帖子以及喜欢该帖子的人数,因为我使用了GROUP BY postid
,这意味着如果结果重复其自身但具有相同的postid
,那么它们将被分组。MYSQL得到所有分组结果一个查询与行数
SELECT posts.id postid,posts.post_body,posts.post_type, ALLUSERS.USERNAME,
likes.liker,likes.target,
plikers.*,
COUNT(posts.id) numberOflikes
FROM posts
INNER JOIN ALLUSERS ON(ALLUSERS.USERID=posts.FROM_userid)
LEFT JOIN likes ON(likes.target=posts.id)
LEFT JOIN(SELECT USERID pl_id FROM ALLUSERS)plikers ON(pl_id=likes.liker)
GROUP BY postid
,结果是...
+--------+-----------------+------------------------+-----------+-------+--------+-------+-----------+---------------+
| postid | post_body | post_type | USERNAME | liker | target | pl_id | pl_un | numberOflikes |
+--------+-----------------+------------------------+-----------+-------+--------+-------+-----------+---------------+
| 83 | Southgate | 20&&03 Saturday/04:05 | Superuser | NULL | NULL | NULL | NULL | 1 |
| 84 | Great post! | 10&&03 Saturday/04:07 | Superuser | 4 | 84 | 4 | dennisrec | 7 |
| 85 | How delightful? | 10&&03 Saturday/04:07 | Superuser | 43 | 85 | 43 | zerCon | 1 |
| 87 | Cheers... | 10&&07 Wednesday/01:53 | Superuser | NULL | NULL | NULL | NULL | 1 |
| 88 | check this out! | 20&&07 Wednesday/03:31 | Superuser | NULL | NULL | NULL | NULL | 1 |
+--------+-----------------+------------------------+-----------+-------+--------+-------+-----------+---------------+
这是正确的,但这种只返回分组的第一个结果。 那么任务站,有没有什么办法可以返回一个查询中所有组的所有结果?
现在显然我可以只取出GROUP BY
和count(*)
短语,则get multiple duplicate results
然后过滤他们获得那个职位的likers
的所有细节,但是这肯定会慢,我的服务器了。所以我已经尝试过了。
任何帮助将非常感激。
你可以用'GROUP_CONCAT(喜欢的。类似器)...'。但是,如果数据量增大,则需要调整“GROUP_CONCAT”的容量。 – 1000111
您当前的查询没有意义,因为您正在使用“GROUP BY”选择非聚合列。 –
@TimBiegeleisen @TimBiegeleisen它确实有意义,我得到的结果受到“GROUP BY”的影响,但它将所有组合并选择每个组的第一个结果,如果我删除它将返回所有结果,但重复的行匹配,但我只是想只抓取likers表中的userid字段。有什么难以理解的? – Dennisrec