php - 多对多 SQL 关系 : how to retrieve all related entries in one query?

标签 php mysql many-to-many

我有与这个问题相同的表格:MySql query over many-to-many relationship . 不过,我正在苦苦挣扎的是如何构建一个查询来获取具有所有属性的植物。 IE。如果我想要 P1 我得到

P1 | A1 | A2 | A3 or P1 | A1, A2, A3

相对于

P1 | A1
P1 | A2
P1 | A3

如果我想要所有的植物,我得到

P1 | A1 | A2 | A3          P1 | A1, A2, A3
P2 | A1 | A2         or    P2 | A1, A2
P3 | A2 | A3               P3 | A2, A3

反之亦然,即显示给定参数的所有植物。首先 - 是否可以创建这样的 SQL 查询?

我现在所拥有的是我获得每株植物一次,并且对于每一行我再次访问数据库以询问属性。正如您可能意识到的那样效率很低,所以我希望您能为我指明正确的方向。

编辑:我想每行一株植物,所有属性都在同一行。

最佳答案

你的意思是像下面这样的吗?我通过删除链接表简化了一些事情,但想法是一样的:

SELECT
  plant.name,
  GROUP_CONCAT(attrib.name) AS attribs
FROM plant
JOIN attrib ON attrib.plant_id = plant.id
GROUP BY plant.id;

+------+----------------+
| name | attribs        |
+------+----------------+
| P1   | A1-1,A1-2,A1-3 |
| P2   | A2-1,A2-2,A2-3 |
| P3   | A3-1,A3-2,A3-3 |
+------+----------------+

或者这个:

SELECT plant.name, GROUP_CONCAT(attrib.name)
FROM plant JOIN attrib
ON attrib.plant_id = plant.id
WHERE attrib.name IN ('A2-1', 'A2-3', 'A3-2')
GROUP BY plant.id;

+------+---------------------------+
| name | GROUP_CONCAT(attrib.name) |
+------+---------------------------+
| P2   | A2-1,A2-3                 |
| P3   | A3-2                      |
+------+---------------------------+

以上内容摘自以下插页:

INSERT INTO plant (name) VALUES
  ('P1'), ('P2'), ('P3');

INSERT INTO attrib (plant_id, name) VALUES
  (1, 'A1-1'), (1, 'A1-2'), (1, 'A1-3'),
  (2, 'A2-1'), (2, 'A2-2'), (2, 'A2-3'),
  (3, 'A3-1'), (3, 'A3-2'), (3, 'A3-3');

关于php - 多对多 SQL 关系 : how to retrieve all related entries in one query?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3256457/

相关文章:

java - 在ManyToMany表, hibernate , Spring 中保存数据的问题

php - PHPUnit TestSuite排除

php - 如何通过javascript访问数据库?

php - XAMPP V3.2.1 -MySQL 抛出错误

mysql - 加快查询速度的方法

mysql - 想要更新数据库中输入的条目。我有代码并显示错误 :

cocoa - 核心数据中可以存在多对多关系吗?

javascript - 使用 php 将 json 文件附加到数组

php - SQL 选择/插入/更新查询 PHP MySQL

java - 多对多 JPA Hibernate 通过连接表映射复合键错误