繁体   English   中英

如何从一个表中获取所有值,该表将自身包含在同一个表中的另一个值邻居字段?

[英]How to get all values from a table which includes itself as another value neighbour field at the same table?

我有3张桌子。 第一个表保留带有id号的“group_names”。 第二个表将“groups_elements”与id_name和group_id数字保持在element_name旁边。 第三个表保持group_elements之间的关系,包括element_id,sub_element_id。 我希望得到concat group_name,element_name和element_id数字sub_elements数字。 这是sqlfiddler链接http://sqlfiddle.com/#!2/44f63

我希望得到这样的结果:

Solid Soil  5,6,7
Liquid Oil  8,9,10

我正在使用MySQL和PHP。

你可以这样做

SELECT  CONCAT(g.group_name,' , ',e.element_name)
, GROUP_CONCAT(DISTINCT  er.sub_element_id)
FROM groups g
JOIN elements e ON(g.id = e.group_id)
JOIN element_subelement_relation  er ON(er.element_id= e.id)
GROUP BY g.group_name, e.element_name

演示

从评论中编辑

SELECT  CONCAT(g.group_name,' , ',e.element_name) `group_elements`
, GROUP_CONCAT(DISTINCT  er.`sub_element_id`) `ids`
FROM groups g
LEFT JOIN elements e ON(g.id = e.group_id)
LEFT JOIN element_subelement_relation  er ON(er.element_id= e.id)
GROUP BY g.group_name, e.element_name
HAVING group_elements IS NOT NULL
ORDER BY g.group_name

演示

使用group_concat()

SELECT g.group_name, group_concat(sub_element_id) as items
FROM elements e INNER JOIN element_subelement_relation er
ON e.id = er.element_id INNER JOIN groups g
ON g.id = e.group_id
GROUP BY g.group_name

演示: http//sqlfiddle.com/#!2/44f63/21

只需在子ID上加入并使用group_concat:

select
  concat(g.group_name, ' ', e.element_name) as name,
  group_concat(sub_element_id order by sub_element_id) as sub_elements
from elements e
inner join groups g on g.id = e.group_id
inner join element_subelement_relation r on r.element_id = e.id
group by name
order by sub_elements, name;

SQL小提琴: http//sqlfiddle.com/# !2/44f63/31。

您可能还想尝试这些:

SELECT g.group_name, e.element_name, concat(g.id,",", e.id,",",esr.id) as ID
FROM element_subelement_relation esr
LEFT JOIN elements e ON(esr.element_id = e.id)
LEFT JOIN groups g ON(e.group_id = g.id)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM