2016-11-29 10 views
0

どのように全製品のグループのユーザーベースをuser_tableとuser_product_table参加とのMySQL - グループ全製品でユーザー・ベース

user_table

id name 
-- ---- 
1  abc 
2  def 
3  ghi 

user_product_table

id user_id product 
-- ------- -------- 
1 1   abcd 
1 1   efgh 
1 1   ijkl 
1 2   mnop 
1 2   qrst 
1 3   uvwx 
1 3   yxab 

に、I得るでしょう

user total_product 
---- ------------- 
abc 3 
def 2 
ghi 2 

count(*)group byuser_product_table.user

と単純なSQLますが、私の予想結果は

user  total_product 
----  ------------- 
abc   3 
def, ghi 2 

である私は多分10000 +レコードを持って、私は、ユーザーの多くは、同じ全製品を持っていると確信していると私はユーザーの総数をグループ化する必要があります

+1

「期待結果」として表示したいですか?あなたの質問は大丈夫ですか? –

+0

@WasiqMuhammad私は結果を 'def、ghi = 2'にする方法を知らない – Kurawa

答えて

1

あなたのクエリは期待どおりに動作し、正しい結果が得られます。同じ量の製品を一緒にグループ化する場合は、mysqlで行うことができます。しかし、あなたが非常に多くのレコードを持っている場合、そのリストはtotal_product = 2またはtotal_product = 3のどれくらいの期間になりますか?それは意味がありますか?

とにかく。これを行うには、(あなたが不幸にしていない)クエリを別のクエリにラップします。

私は、これは、既存のクエリです推測:

SELECT u.name, COUNT(p.id) as total_products 
FROM user_table u 
JOIN user_product_table p ON p.user_id=u.id 

そして今、我々のグループ名

SELECT GROUP_CONCAT(a.name) as names, a.total_products 
FROM (
    SELECT u.name, COUNT(p.id) as total_products 
    FROM user_table u 
    JOIN user_product_table p ON p.user_id=u.id 
) as a 
GROUP BY a.total_products 

によってGROUP_CONCAT列がテキストのみの一定量を表示することに注意してくださいということ。連結名が長い場合は、欠落している可能性があります。