2016-12-12 11 views
0

だから私はこれをどこでも検索しましたが、この特定の関係は見つかりません。以下のクエリは、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 BYcount(*)フレーズが、その後get multiple duplicate resultsが、その後のポストのlikersのすべての詳細を得るためにそれらをフィルタリング削除することもできますが、それは確かに私のサーバーが遅くなります。だから私はすでにそれを試みました。

ご協力いただければ幸いです。

+1

に留意する必要があります示唆しています。恋人).. .. '。しかし、データサイズが大きくなると、GROUP_CONCATの容量を調整する必要があります。 – 1000111

+2

現在のクエリは、GROUP BYで集計されていない列を選択しているため意味がありません。 –

+0

@TimBiegeleisenそれは理にかなっており、結果は "GROUP BY"の影響を受けますが、すべてをグループ化し、すべてのグループの最初の結果を選択し、すべての結果を返しますが、 likersテーブルからuseridフィールドだけを取得します。何が分かりにくいですか? – Dennisrec

答えて

1

モデルが1000111 @として次にこの

MariaDB [sandbox]> select * from posts; 
+------+-----------+-----------+-------------+ 
| id | post_body | post_type | from_userid | 
+------+-----------+-----------+-------------+ 
| 1 | POST1  | NULL  |   1 | 
| 2 | POST2  | NULL  |   2 | 
+------+-----------+-----------+-------------+ 
2 rows in set (0.00 sec) 

MariaDB [sandbox]> select * from likes; 
+------+--------+-------+ 
| id | TARGET | liker | 
+------+--------+-------+ 
| 1 |  1 |  3 | 
| 2 |  1 |  7 | 
| 3 |  2 |  8 | 
| 3 |  2 |  6 | 
+------+--------+-------+ 
4 rows in set (0.00 sec) 

MariaDB [sandbox]> select * from users where id < 9; 
+----+----------+-----------+--------+---------------------+ 
| id | userName | photo  | status | ts     | 
+----+----------+-----------+--------+---------------------+ 
| 1 | John  | john.png |  1 | 2016-12-08 13:14:24 | 
| 2 | Jane  | jane.png |  1 | 2016-12-08 13:14:24 | 
| 3 | Ali  |   |  1 | 2016-12-08 13:14:24 | 
| 6 | Bruce | bruce.png |  1 | 2016-12-08 13:14:24 | 
| 7 | Martha |   |  1 | 2016-12-08 13:14:24 | 
| 8 | Sidney |   |  1 | 2016-12-08 13:14:24 | 
+----+----------+-----------+--------+---------------------+ 
6 rows in set (0.00 sec) 

のように見える場合は、あなたが

MariaDB [sandbox]> SELECT posts.id postid,posts.post_body,posts.post_type,POSTS.FROM_USERID 
    -> , USERS.USERNAME 
    ->  ,GROUP_CONCAT(likes.liker) LIKER 
    -> ,likes.target 
    -> ,GROUP_CONCAT(plikers.pl_id) pl_id 
    ->  ,GROUP_CONCAT(plikers.UNAME) pl_un 
    -> ,COUNT(posts.id) numberOflikes 
    -> 
    -> FROM posts 
    -> INNER JOIN USERS ON USERS.ID=posts.FROM_userid 
    -> LEFT JOIN likes ON likes.target=posts.id 
    -> LEFT JOIN(SELECT ID pl_id, USERNAME UNAME FROM USERS)plikers ON pl_id=likes.liker 
    -> GROUP BY postid; 
+--------+-----------+-----------+-------------+----------+-------+--------+-------+--------------+---------------+ 
| postid | post_body | post_type | FROM_USERID | USERNAME | LIKER | target | pl_id | pl_un  | numberOflikes | 
+--------+-----------+-----------+-------------+----------+-------+--------+-------+--------------+---------------+ 
|  1 | POST1  | NULL  |   1 | John  | 7,3 |  1 | 7,3 | Martha,Ali |    2 | 
|  2 | POST2  | NULL  |   2 | Jane  | 6,8 |  2 | 6,8 | Bruce,Sidney |    2 | 
+--------+-----------+-----------+-------------+----------+-------+--------+-------+--------------+---------------+ 
2 rows in set (0.00 sec) 

ことができますが、あなたはあなたが `GROUP_CONCAT(同類を使用することができます警告

+0

あなたは私が提示した問題を理解した唯一の人です!大変感謝しています。 – Dennisrec

+0

それはとてもうまくいった! – Dennisrec

関連する問題