我有一个如下表
============
item | tag
-----+------
111 | amaretto
-----+------
111 | blueberry
-----+------
222 | amaretto
-----+------
333 | blueberry
-----+------
333 | chocolate
-----+------
444 | chocolate
-----+------
444 | amaretto
-----+------
555 | chocolate
-----+------
666 | blueberry
-----+------
666 | amaretto
-----+------
666 | chocolate
============
列item
和tag
一起构成一个复合主键。让我们将商品想象成冰淇淋,将标签想象成可用的口味。例如,如果我搜索 amaretto(对于冰淇淋),我想显示所有可能的 amaretto 冰淇淋组合,例如 amaretto、amaretto+chocolate、blueberry+amaretto 等。如果我搜索标签 amaretto
,我想显示所有可能的组合,例如;
amaretto (222)
amaretto,blueberry (111)
amaretto,chocloate (444)
amaretto,blueberry,chocolate (666)
并且组合 amaretto,blueberry
和 blueberry,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/