简体   繁体   中英

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

I have 3 tables. First table keeps "group_names" with id numbers. Second table keeps "groups_elements" with id numbers and group_id numbers next to element_name. Third table keeps relations between group_elements which includes element_id, sub_element_id. I wish to get concat group_name, element_name and element_id numbers sub_elements numbers. Here is sqlfiddler link http://sqlfiddle.com/#!2/44f63

And i wish to get such result:

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

I am using MySQL and PHP.

You can do so

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

Demo

Edit from comments

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

Demo

using 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

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

Simply join and use group_concat on the sub ids:

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;

The SQL fiddle: http://sqlfiddle.com/#!2/44f63/31 .

You may also want to try these:

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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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