我有与这个问题相同的表格: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/