php - Mysql排序连接值

标签 php mysql

我有 3 个 mysql 表(动物、类别和 animal_2_category)。 每个动物都可以有 0-n 个类别(例如鱼、宠物、昆虫、食肉动物、“会飞”等)。

表“动物”(id、名称)

1, dog
2, cat
3, bee
...

表“类别”(id、名称)

1, pet
2, insect
3, mammal
4, fish
5, can fly
...

表“animal_2_category”(animal_id、category_id)

1, 1
1, 3
2, 1
2, 3
3, 2
3, 5
...

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

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

此查询将返回以下内容:

  • 宠物哺乳动物
  • 哺乳动物-宠物
  • 昆虫能飞

问题是,我得到了重复的条目“pet-mammal”和“mammal-pet”。 我怎样才能修改查询,只得到其中之一,例如:

  • 宠物哺乳动物
  • 昆虫能飞

最佳答案

您还可以将查询重写为

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

DEMO

关于php - Mysql排序连接值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29941921/

相关文章:

不允许远程连接的 Windows 共享主机中的 MySQL 备份

Spring-Hibernate-MySQL 应用程序中的 javax.el.PropertyNotFoundException : Property not found on type java. lang.String

php - 从 PHP 循环获取 ID 并在 Bootstrap 模式的 MYSQL 查询中使用

javascript - jQuery+ajax jquery-1.11.3.min.js :5 XMLHttpRequest cannot load

c# - 将.NET类序列化为PHP

php - If 语句中的逻辑错误?

php - 用唯一值构建我的数据库表

php - 如何使用 UPDATE 表 SET column = NULL 释放未使用的空间?

Mysql 获取值为最大值的整行

php - symfony 中的多重连接 : Error: Expected =, <, <=, <>, >, >=, !=