繁体   English   中英

分面搜索属性计数

[英]Faceted Search Attribute Count

我想对以下小提琴进行属性计数查询。 小提琴

它的工作完美,但我无法使用此方法计算属性。 不知道如何实现,因为花了很多小时并更改查询后,它仍然对我不起作用。 有人有建议吗?

这是您的方法:

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

这很容易。 自然,您必须像这样使用OR而不是在HAVING子句中使用AND (汽车不能同时为黑色和红色)

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演示

我不太确定您要计数什么,但是此查询将计数数据库中的每个条目: http : //sqlfiddle.com/#!2/46a7b5/15/0

仅使用COUNT()函数: http : //dev.mysql.com/doc/refman/5.1/en/counting-rows.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM