Mysql排序合并的值

ber*_*rdh 9 php mysql

我有3个mysql表(动物,类别和animal_2_category).每只动物都可以有0-n类别(例如鱼类,宠物,昆虫,食肉动物,"可以飞行"等).

表"动物"(id,name)

1, dog
2, cat
3, bee
...
Run Code Online (Sandbox Code Playgroud)

表"类别"(id,name)

1, pet
2, insect
3, mammal
4, fish
5, can fly
...
Run Code Online (Sandbox Code Playgroud)

表"animal_2_category"(animal_id,category_id)

1, 1
1, 3
2, 1
2, 3
3, 2
3, 5
...
Run Code Online (Sandbox Code Playgroud)

我现在需要的是所有类别组合的列表.以下查询有效:

SELECT CONCAT_WS("-", x.name, c.name)
FROM animal_2_category a2c1 
    JOIN animal_2_category a2c2 ON a2c1.animal_id = a2c2.animal_id
    JOIN category c ON c.id = a2c2.category_id´
    JOIN categories x
GROUP BY a2c2.category_id
Run Code Online (Sandbox Code Playgroud)

此查询将返回以下内容:

  • 宠物哺乳动物
  • 哺乳类宠物
  • 昆虫可以飞

这个问题是,我得到了"宠物哺乳动物"和"哺乳动物宠物".如何修改查询,只获取其中一个,例如:

  • 宠物哺乳动物
  • 昆虫可以飞

M K*_*aid 2

您还可以将查询重写为

SELECT  DISTINCT GREATEST(CONCAT_WS("-", x.name, c.name),CONCAT_WS("-", c.name, x.name)) col
FROM animal_2_category a2c1 
    JOIN animal_2_category a2c2 ON a2c1.animal_id = a2c2.animal_id
    JOIN categories c ON c.id = a2c2.`category_id`
    JOIN categories `x` ON a2c1.category_id = x.id
    WHERE x.name <> c.name
Run Code Online (Sandbox Code Playgroud)

DEMO