だから私はこれをどこでも検索しましたが、この特定の関係は見つかりません。以下のクエリは、GROUP BY postid
を使用した結果、投稿が好きだった人の数と人数からすべての投稿を返します。結果が繰り返されても同じである場合は、同じpostid
がグループ化されます。MYSQLはすべてのグループ化された結果を1つの行のカウントで取得します
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 |
+--------+-----------------+------------------------+-----------+-------+--------+-------+-----------+---------------+
。 だから、クエストは立っています。はすべてのグループのすべての結果を1つのクエリで返します。?
は今、明らかに私はちょうどGROUP BY
とcount(*)
フレーズが、その後get multiple duplicate results
が、その後のポストのlikers
のすべての詳細を得るためにそれらをフィルタリング削除することもできますが、それは確かに私のサーバーが遅くなります。だから私はすでにそれを試みました。
ご協力いただければ幸いです。
に留意する必要があります示唆しています。恋人).. .. '。しかし、データサイズが大きくなると、GROUP_CONCATの容量を調整する必要があります。 – 1000111
現在のクエリは、GROUP BYで集計されていない列を選択しているため意味がありません。 –
@TimBiegeleisenそれは理にかなっており、結果は "GROUP BY"の影響を受けますが、すべてをグループ化し、すべてのグループの最初の結果を選択し、すべての結果を返しますが、 likersテーブルからuseridフィールドだけを取得します。何が分かりにくいですか? – Dennisrec