php - 使用 php 进行分面搜索

标签 php mysql faceted-search

有没有办法在没有 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

表项元:

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

现在我想过滤是否有人选择黑色 BMW,但如果我使用 IN 则给出全黑或 BMW。但我想要 AND 条件相同。 如果您知道分面搜索,那么您可以轻松地理解我的意思。我想查询以对上面的表结构执行相同的操作。

**Addition:**

我还需要显示搜索和列出的每个属性的计数。喜欢:

Make:
BMW (2)
Color:
Black(2)
White(1)
...
Car Type:
....
Interior Color:
...

最佳答案

你在找这样的东西吗?

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

关于php - 使用 php 进行分面搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24149490/

相关文章:

带链接的 PHP for() 循环

php - 根据当前 session 选择计数并集

c# - MySql Server中将两个表的数据写入一个xml文件中

java - Solr 。多面搜索理解

ruby-on-rails - 在Elasticsearch中将条件运算符与构面混合

php - 在 php 中创建 2 个相互依赖的下拉菜单

php - Go中如何实现PHP的gzopen?

php - 如何建立一个给积分的paypal捐赠系统

php - 选择一个不同的值及其在列中显示的次数总和

sql - 关系数据库中分面搜索的高效实现