0

私はテーブルカテゴリを持っています。フォーマットはこのようなものです

|id|parent_id|name|  
|1 |0        |sport|  
|2 |0        |music|
|3 |1        |Stadium|
|4 |1        |Golf| 
|5 |2        |Theater|
|6 |2        |Cinema|

説明

parent_id = 0はメインカテゴリー

parent_id != 0はサブカテゴリで、メインのカテゴリは Parent_id です

これはユーザーテーブルです

|id|name|category_id|
|1 |andrea|6        |
|2 |Michael | 5     |
|3 |Gorchuf | 1     |

問題

ユーザーテーブルに含めるカテゴリを選択し、メインカテゴリの例のみを表示すると、目標は次のようになります

|id|name|total|
|1 |sport |1  |
|2 |music |2  |

私はこのクエリを試しています

SELECT C.id C.name, count( U.category_id ) AS total
FROM categories C
LEFT JOIN users U ON ( U.category_id = C.id )
GROUP BY C.id
LIMIT 0 , 30

しかし、結果にはサブカテゴリとメインカテゴリが含まれます

|id|name|total|
|1 |cinema |1 |
|2 |theater|1 |
|3 |sport  |1 |

そのメイン カテゴリのみをフィルタリングするにはどうすればよいですか?

4

2 に答える 2

1

質問:

SQLFiddleExample

SELECT c.id, c.name,
(SELECT  count(u.id)
 FROM users u
  LEFT JOIN categories c1
    ON u.category_id = c1.id
  WHERE CASE WHEN c1.parent_id = 0 
             THEN c1.id
             ELSE c1.parent_id 
        END = c.id) AS total
FROM categories c
WHERE c.parent_id = 0
GROUP BY c.id

結果:

| ID |  NAME | TOTAL |
----------------------
|  1 | sport |     1 |
|  2 | music |     2 |
于 2012-12-14T18:15:46.080 に答える
1

これで問題が解決します--

SELECT pc . * , (SELECT count( * ) FROM category  AS pc1 WHERE pc.id = pc1.parent_id) AS CNT
FROM `category` AS pc
WHERE `parent_id` =0
于 2012-12-14T09:26:59.053 に答える