php - 如何从标签和项目表中获取所有可能的组合?

标签 php mysql database

我有一个如下表

============
item | tag
-----+------
111  | amaretto
-----+------
111  | blueberry
-----+------
222  | amaretto
-----+------
333  | blueberry
-----+------
333  | chocolate
-----+------
444  | chocolate
-----+------
444  | amaretto
-----+------
555  | chocolate
-----+------
666  | blueberry
-----+------
666  | amaretto
-----+------
666  | chocolate
============

itemtag一起构成一个复合主键。让我们将商品想象成冰淇淋,将标签想象成可用的口味。例如,如果我搜索 amaretto(对于冰淇淋),我想显示所有可能的 amaretto 冰淇淋组合,例如 amaretto、amaretto+chocolate、blueberry+amaretto 等。如果我搜索标签 amaretto,我想显示所有可能的组合,例如;

amaretto (222)
amaretto,blueberry (111)
amaretto,chocloate (444)
amaretto,blueberry,chocolate (666)

并且组合 amaretto,blueberryblueberry,amaretto 是相同的。

我该怎么做?我需要额外的 table 吗?我使用PHP+MySQL。

最佳答案

SELECT tt.item,
GROUP_CONCAT(DISTINCT  tt.tag) FROM mytable tt
 JOIN mytable ttt 
ON tt.item=ttt.item
GROUP BY tt.item
HAVING SUM(tt.tag='yourtag')>0

一种解决方案是 GROUP BY GROUP_CONCAT 的结果(如果它们先排序)

SELECT MIN(item),tags FROM
(SELECT  tt.item,
GROUP_CONCAT(DISTINCT  tt.tag ORDER BY tt.tag) tags FROM mytable tt
 JOIN mytable ttt 
ON tt.item=ttt.item
GROUP BY tt.item
HAVING SUM(tt.tag='amaretto')>0)x
GROUP BY tags

关于php - 如何从标签和项目表中获取所有可能的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33890365/

相关文章:

mysql - 如何在 VSCode 中断开与 MySQL 服务器的连接?

mysql - 以附加的形式从两个表中提取数据

css - 访问 HTML5 游戏应用程序 Sprite 表的最快方法

sql - 合并两个不同时间的数据表 preferred in access

javascript - 尝试通过 AJAX 从多个窗口传递多个变量

php - 使用 Codeception 删除 cookie

php - 如果类别的值为="",如何打破跳过循环?

php - 如何复制 ArrayIterator 以保留其当前迭代位置?

php - UTF-8贯穿始终

mysql - 编写脚本以在 SQL 中转换 varchar 数据