当前位置: 首页 > 面试题库 >

sql查询以通过标签确定最相似的商品

孙思源
2023-03-14
问题内容

我正在一家电子商店,所以我有3张桌子:

1) goods

id      | title
--------+----------- 
1       | Toy car
2       | Toy pony
3       | Doll

2) tags

id      | title
--------+----------- 
1       | Toy
2       | Boys
3       | Girls

3) links

goods_id| tag_id
--------+----------- 
1       | 1
1       | 2
2       | 1
2       | 2
2       | 3
3       | 3

所以我需要使用这种算法打印相关商品:使用标签获取与所选商品最相似的商品。最多的标签是相互的-最合适的项目是

因此,的结果goods#1应为:goods#2goods#3

对于goods#2goods#1goods#3

对于goods#3goods#2goods#1

而且我不知道如何通过一个查询按相互标记的数量来排序相似的商品


问题答案:

此查询将返回所有具有最大标签数的物品:

SET @item = 1;

SELECT
  goods_id
FROM
  links
WHERE
  tag_id IN (SELECT tag_id FROM links WHERE goods_id=@item)
  AND goods_id!=@item
GROUP BY
  goods_id
HAVING
  COUNT(*) = (
    SELECT
      COUNT(*)
    FROM
      links
    WHERE
      tag_id IN (SELECT tag_id FROM links WHERE goods_id=@item)
      AND goods_id!=@item
    GROUP BY
      goods_id
    ORDER BY
      COUNT(*) DESC
    LIMIT 1
  )

请看这里的小提琴。

否则,这将返回所有项目,即使没有共同标签的项目也按共同desc中的标签数排序:

SELECT
  goods_id
FROM
  links
WHERE
  goods_id!=@item
GROUP BY
  goods_id
ORDER BY
  COUNT(CASE WHEN tag_id IN (SELECT tag_id FROM links WHERE goods_id=@item) THEN 1 END) DESC;


 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 查找两个纬度/经度之间距离的最快方法 (15个答案) 2年前关闭。 我有和,现在在MySQL中我想将15个最近的位置放在这些坐标处,并且我打算进行以下查询: 您认为这是正确的还是其他建议? ,该怎么办,因为我想在附近的地方搜索最大50公里的波谷? 我忘了说我也可以在运行查询之前使用PHP进行任何操作。 注意: 我不能使用存储过程 。 问题答案: 这里是

  • 问题内容: 我有以下查询: 我想为该选项命名时如何更改标题。 问题答案: 使用这样的别名: 如果要更改列名,则不仅要为此查询使用,而且通常要使用ALTER TABLE

  • 问题内容: 好的,我有一个关系,该关系存储两个键,一个产品ID和一个属性ID。我想弄清楚哪种产品与给定的产品最相似。(属性实际上是数字,但这会使示例更加混乱,因此已将其更改为字母以简化视觉表示。) Prod_att 最初,这似乎很简单,只需选择产品具有的属性,然后计算每个产品共享的属性数。然后将其结果与一个产品具有的属性数量进行比较,我可以看到两个产品的相似程度。这适用于相对于其比较产品具有大量属

  • 问题内容: 我期望我的jQuery代码使用此JSON: 这些数据将来自MySql表 : SQL查询应该是什么,以便输出 1个平面表 ,可以很容易地将其转换为JSON(在PHP或JavaScript / jQuery中)? 我什至以正确的方式走这条路吗? 问题答案: 您可以直接从MySQL生成JSON内容。这是可与MySQL 5.7或更高版本一起使用的解决方案。 首先,coonsider函数,该函数

  • 问题内容: 如果我有一个表列,,, 并且我想运行一个sql查询以获取数据集中最早的记录。 您可以在查询中执行此操作,还是需要在事实之后循环? 我想获取该记录的所有字段。 问题答案: 如果您只想要日期: 如果您需要所有信息: 尽可能避免循环。循环通常会导致游标,游标几乎从来没有必要,而且常常效率很低。

  • 问题内容: 假设我有以下表格: 标签 id:整数 名称:字符串 帖子 id:整数 正文:文本 标记 id:整数 tag_id:整数 post_id:整数 我将如何编写一个查询来选择所有带有以下所有标记(标记表的名称属性)的标记的查询:“奶酪”,“葡萄酒”,“巴黎”,“宽限期”,“城市”,“风景区”,“艺术” 另请参阅:需要有关SQL查询的帮助以查找带有大多数指定标签的内容(注意:相似,但不能重复!