我试图制作包含存储产品的数据库。每个产品都包含未知数量的可能"选择"它定义了存储的产品版本。
例如,产品Sofa
包含选择Color: Black
,Legs: Wood
和Material: Leather
,而产品Bed
仅包含选择Mattress: Hard
。
我已经使用GROUP_CONCAT来获得所有类似的沙发:
SELECT DISTINCT p.product, p.size, p.color,p.storage,
GROUP_CONCAT(s.selection, ': ' ,s.option) AS selection
FROM product p
INNER JOIN selection s
ON p.id = s.product_id
WHERE product.id = 123
GROUP BY s.id;
问题是我如何计算查询中连接的产品数量,或者甚至可以用单个查询计算?
编辑:
SELECT DISTINCT product_storage.product, product_storage.size,
product_storage.color, product_storage.storage,
GROUP_CONCAT(product_storage_selection.selection,
product_storage_selection.option) as selection
FROM product_storage_link
INNER JOIN product_storage
ON product_storage_link.product_storage_id = product_storage.id
INNER JOIN product_storage_selection
ON product_storage.id = product_storage_selection.product_storage_id
WHERE product_storage_link.product_id = 7207
GROUP BY product_storage.id;
给出
Product Color Size Selection
Product1 Black 10x10 Selection1:Option1, Selection2:Option1
Product1 Black 10x10 Selection1:Option2, Selection2:Option1
Product1 White 10x10 Selection1:Option1, Selection2:Option1
我尝试在这两个表中计算重复数,并从其他表中获得相同的选择。希望这能解决问题。
所以我们的目标是获得例如:
Product Color Size Selection amount
Product1 Black 10x10 Selection1:Option1, Selection2:Option1 3
Product1 Black 10x10 Selection1:Option2, Selection2:Option1 1
Product1 White 10x10 Selection1:Option1, Selection2:Option1 2
数据库中的部分:
http://sqlfiddle.com/#!9/fec0b
编辑2:
这是包含数据的整个表格。
| id | product | size | color | storage | selection | option | |----|---------|-------|----------|---------|------------------|----------------| | 1 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 1 | Vaihtoehto 1 | | 1 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 | | 2 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 1 | Vaihtoehto 1 | | 2 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 | | 3 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 1 | Vaihtoehto 1 | | 3 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 | | 4 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 1 | Vaihtoehto 2 | | 4 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 2 | 2 Vaihtoehto 2 | | 5 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 1 | Vaihtoehto 2 | | 5 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 2 | 2 Vaihtoehto 2 | | 6 | asd | Koko2 | 2 Väri 2 | false | Lisävaihtoehto 1 | Vaihtoehto 1 | | 6 | asd | Koko2 | 2 Väri 2 | false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 | | 7 | asd | Koko2 | 2 Väri 2 | false | Lisävaihtoehto 1 | Vaihtoehto 1 | | 7 | asd | Koko2 | 2 Väri 2 | false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 |
首先从这些值构建产品。
| id | product | size | color | storage | selection | option | |----|---------|-------|----------|---------|------------------|----------------| | 1 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 1 | Vaihtoehto 1 | | 1 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 | | 2 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 1 | Vaihtoehto 1 | | 2 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 | | 3 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 1 | Vaihtoehto 1 | | 3 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 |
应该出现:
| product | size | color | storage | selection | amount | |---------|-------|----------|---------|-------------------------------------------------------------|----------------| | asd | Koko1 | Väri1 | false | Lisävaihtoehto 1:Vaihtoehto 1,Lisävaihtoehto 2:Vaihtoehto 1 | 3 |
第二种产品构造来自:
| id | product | size | color | storage | selection | option | |----|---------|-------|----------|---------|------------------|----------------| | 4 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 1 | Vaihtoehto 2 | | 4 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 2 | 2 Vaihtoehto 2 | | 5 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 1 | Vaihtoehto 2 | | 5 | asd | Koko1 | Väri1 | false | Lisävaihtoehto 2 | 2 Vaihtoehto 2 |
出来:
| product | size | color | storage | selection | amount | |---------|-------|----------|---------|---------------------------------------------------------------|----------------| | asd | Koko1 | Väri1 | false | Lisävaihtoehto 1:Vaihtoehto2, Lisävaihtoehto 2,2 Vaihtoehto 2 | 2 |
第三个来自这些:
| id | product | size | color | storage | selection | option | |----|---------|-------|----------|---------|------------------|----------------| | 6 | asd | Koko2 | 2 Väri 2 | false | Lisävaihtoehto 1 | Vaihtoehto 1 | | 6 | asd | Koko2 | 2 Väri 2 | false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 | | 7 | asd | Koko2 | 2 Väri 2 | false | Lisävaihtoehto 1 | Vaihtoehto 1 | | 7 | asd | Koko2 | 2 Väri 2 | false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 |
应该产生:
| product | size | color | storage | selection | amount | |---------|-------|----------|---------|-----------------------------------------------------------------|----------------| | asd | Koko2 | 2 Väri 2 | false | Lisävaihtoehto 1:Vaihtoehto 1, Lisävaihtoehto 2:2 Vaihtoehto 1 | 2 |
希望这会有所帮助。这有点难以解释。
答案 0 :(得分:0)
尝试COUNT(*)
SELECT DISTINCT p.product, p.size, p.color,p.storage,
GROUP_CONCAT(s.selection, ': ' ,s.option) AS selection,
COUNT(*) as cnt
FROM product p
INNER JOIN selection s
ON p.id = s.product_id
WHERE product.id = 123
GROUP BY s.id;
tableTest
+-----------------------------------------------+
| ID | name | country | home_city |
+-----------------------------------------------+
| 1 | AAA | UK | Cambridge |
| 2 | BBB | Canada | Toronto |
| 3 | CCC | UK | Leeds |
| 4 | DDD | USA | Newyork |
+-----------------------------------------------+
SELECT country,count(*) as countryCount
FROM tableTest
GROUP BY country
+-----------------------+
|country |countryCount |
+-----------------------+
|UK | 2 |
|Canada | 1 |
|USA | 1 |
+-----------------------+