我想要跟随小提琴进行属性计数查询。 FIDDLE
它的工作完美,但我没有使用它计算属性。不知道它是如何实现的,因为花了很多时间和更改查询仍然不适合我。 有人有建议??
答案 0 :(得分:1)
您可以这样做:
SELECT meta_name, meta_value, COUNT(DISTINCT item_id) count
FROM meta m JOIN item_meta im
ON im.field_id = m.id
GROUP BY meta_name, meta_value
输出:
| META_NAME | META_VALUE | COUNT | |----------------|------------|-------| | Car Type | Coupe | 2 | | Car Type | Sedan | 1 | | Color | Black | 1 | | Color | Red | 1 | | Color | White | 1 | | Interior Color | Black | 2 | | Interior Color | Grey | 1 | | Make | BMW | 2 | | Make | Honda | 1 | | Model | 2Series | 1 | | Model | 3Series | 1 | | Model | Civic | 1 |
这是 SQLFiddle 演示
<强>更新强>
过滤
SELECT meta_name, meta_value, COUNT(DISTINCT item_id) count
FROM meta m JOIN item_meta im
ON im.field_id = m.id
WHERE item_id IN
(
SELECT i.id
FROM item_meta im JOIN items i
ON im.item_id = i.id JOIN meta m
ON im.field_id = m.id
GROUP BY i.id
HAVING MAX(meta_name = 'Make' AND meta_value = 'BMW') = 1
AND MAX(meta_name = 'Car Type' AND meta_value = 'Coupe') = 1
)
GROUP BY meta_name, meta_value;
输出:
| META_NAME | META_VALUE | COUNT | |----------------|------------|-------| | Car Type | Coupe | 2 | | Color | Black | 1 | | Color | White | 1 | | Interior Color | Black | 1 | | Interior Color | Grey | 1 | | Make | BMW | 2 | | Model | 2Series | 1 | | Model | 3Series | 1 |
这是 SQLFiddle 演示
UPDATE2:
另外如何处理相同功能2次,就像我一样 搜索黑色和红色没有别的。它目前没有显示任何结果。 但它应该显示两个结果。但如果查询就像宝马黑色和 红色然后它应该只显示宝马黑色或红色,否则显示0 结果
很容易。自然而不是在AND
条款中使用HAVING
(汽车不能同时为黑色和红色),您必须使用OR
这样
HAVING MAX(meta_name = 'Color' AND meta_value = 'Black') = 1
OR MAX(meta_name = 'Color' AND meta_value = 'Red') = 1
或者这是表达相同意图的另一种方式
HAVING MAX(meta_name = 'Color' AND meta_value = 'Black') +
MAX(meta_name = 'Color' AND meta_value = 'Red') > 0
这是 SQLFiddle 演示
答案 1 :(得分:0)
我不太确定您想要计算什么,但此查询会计算数据库中的每个条目:http://sqlfiddle.com/#!2/46a7b5/15/0
只需使用COUNT()函数:http://dev.mysql.com/doc/refman/5.1/en/counting-rows.html