搜索具有类似标签ID的记录

时间:2015-07-16 22:49:55

标签: php mysql sql database

我有一个标记表,如下所示:

id  |  product_id | tag_id
---------------------------
1   |           1 |     10
2   |           1 |     12
3   |           2 |     10
4   |           3 |     11

我创建了一个搜索页面,用户将标签作为输入(1个或多个),并在数据库中搜索包含这些标签的记录。

例如:
  • 如果用户输入了' 10'然后使用上面的表格结果将是product_id 1& 2。

编辑:

  • 有2个用户输入

    1. 包含标记 - >使用这些标签搜索产品

    2. 排除标记 - >搜索没有这些标签的产品

因此,搜索查询必须先忽略排除标记,然后使用' include标记搜索产品。

编辑2:

用户可以输入1个或多个标签。

知道怎么做吗?

2 个答案:

答案 0 :(得分:1)

运行此SQL查询:

$includedTags = join(',',$incTagsIdArr);
$excludedTags = join(',',$excTagsIdArr);
$sql = "SELECT product_id FROM $tagTable WHERE tag_id IN ($includedTags) AND tag_id NOT IN ($excludedTags)"

其中:

  • $incTagsIdArr是用户
  • 的请求标记ID数组
  • $excTagsIdArr是用户
  • 排除的标记ID数组
  • $tagTable是您的标记"表名称

答案 1 :(得分:0)

这是一种使用聚合和having的简单方法:

select tt.product_id
from tagtable tt
group by tt.product_id
having sum(tt.tag_id in ($excludedtags)) = 0 and
       sum(tt.tag_id in ($includedtags)) = #NumberIncludedtags;

您需要为第二个条件输入所包含标签的数量。此外,这假设标签表没有重复的行(如果是这样,可以使用count(distinct)轻松修复,但会使查询混乱)。