【问题标题】:Faceted Search using php使用 php 进行分面搜索
【发布时间】:2014-06-10 19:36:20
【问题描述】:

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

现在我想过滤是否有人选择 Black BMW,但如果我使用 IN,它会给出全黑或 BMW。但我希望与 AND 条件相同。 如果您知道分面搜索,那么您可以轻松了解我的意思。我想对上面的表结构做同样的查询。

**Addition:**

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

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

【问题讨论】:

  • 发布您的 SQL。但从设计的角度来看,对于分面搜索,您应该为每个属性(品牌、型号、颜色)设置一个表,否则您将多次自行加入表项元数据。
  • @OscarM。我正在使用 UI 添加属性。允许用户添加/删除表是一种好习惯吗?在添加/删除或编辑属性时?我不知道所以请指导我。

标签: php mysql faceted-search


【解决方案1】:

你在寻找这样的东西吗?

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

输出:

|身份证 |说明 | USER_ID |制作 |颜色 | |----|-------------|---------|------|--------| | 2 |梦想之车| 3 |宝马 |黑色 |

这里是SQLFiddle演示

【讨论】:

  • 我正在寻找类似的东西。但问题是当我在我的数据库上尝试时它给出的结果为零。扯我的毛……不知道哪里错了。
  • 谢谢,这是完美的解决方案。我刚刚意识到我使用的组合没有任何项目。改变了标准并像魅力一样工作。现在如何显示每个属性的计数?因为它将适用于每个属性。你能指导我吗??
  • @user3727370 count for each attribute 是什么意思?你没有在你的问题中提到它......
  • 我还需要其他查询吗?还是同样可以计算?
  • 通过展示您可以看到的示例来详细说明,ebay、amazon、sportsdirect.com 等。
猜你喜欢
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-24
  • 2015-11-03
  • 1970-01-01
相关资源
最近更新 更多