有没有办法在没有solr,lucene等的情况下进行分面搜索。只有php,MySQL和Javascript。我试图在分类广告网站上实施,但失败了。问题是当尝试过滤属性表时。结构如下:
表项目:
id description user_id
1 my car 3
2 dream car 3
3 New car 3
4 Old car 4
表元字段:
id meta name
1 Make
2 Model
3 Color
4 Car Type
5 Interior Color
表项目Meta:
item_id field_id meta_value
1 1 BMW
1 2 3Series
1 3 White
1 4 Coupe
1 5 Black
2 1 BMW
2 2 2Series
2 3 Black
2 4 Coupe
2 5 Grey
3 1 Honda
3 2 Civic
3 3 Red
3 4 Sedan
3 5 Black
现在我想过滤一下如果有人选择Black BMW,但如果我使用IN给它全黑或宝马。但我想和AND条件相同。 如果您知道分面搜索,那么您可以很容易地知道我的意思。我想使用上面的表结构进行查询。
**Addition:**
此外,我需要显示搜索和列出的每个属性的计数。像:
Make:
BMW (2)
Color:
Black(2)
White(1)
...
Car Type:
....
Interior Color:
...
答案 0 :(得分:2)
你在找这样的东西吗?
SELECT i.*,
MAX(CASE WHEN meta_name = 'Make' THEN meta_value END) make,
MAX(CASE WHEN meta_name = 'Color' THEN meta_value END) color
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 = 'Color' AND meta_value = 'Black') = 1
输出:
| ID | DESCRIPTION | USER_ID | MAKE | COLOR | |----|-------------|---------|------|-------| | 2 | dream car | 3 | BMW | Black |
这是 SQLFiddle 演示