Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从一个表中获取所有值,该表将自身作为同一表中的另一个值邻域字段?_Php_Mysql_Sql - Fatal编程技术网

Php 如何从一个表中获取所有值,该表将自身作为同一表中的另一个值邻域字段?

Php 如何从一个表中获取所有值,该表将自身作为同一表中的另一个值邻域字段?,php,mysql,sql,Php,Mysql,Sql,我有三张桌子。 第一个表保留带有id号的“组名称”。第二个表在元素名称旁边保留带有id号和组id号的“组元素”。第三个表保存组元素之间的关系,其中包括元素id、子元素id。 我希望获得concat组名称、元素名称和元素id编号子元素编号。 这里是sqlfiddler链接 我希望得到这样的结果: Solid Soil 5,6,7 Liquid Oil 8,9,10 我正在使用MySQL和PHP。您可以这样做 SELECT CONCAT(g.group_name,' , ',e.elemen

我有三张桌子。 第一个表保留带有id号的“组名称”。第二个表在元素名称旁边保留带有id号和组id号的“组元素”。第三个表保存组元素之间的关系,其中包括元素id、子元素id。 我希望获得concat组名称、元素名称和元素id编号子元素编号。 这里是sqlfiddler链接

我希望得到这样的结果:

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\u concat()


演示:

只需在子ID上加入并使用group\u 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 FIDLE:。

您也可以尝试以下方法:

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)

您喜欢一列或单独一列的结果吗?使用
GROUP\u CONCAT
JOIN
链接表。你应该做的第一件事是向我们展示你所做的…我的意思是第一列是实心的,因为第二列和第三列是实心的,以及(5,6,7)如何在记录中而不是在字段中求取值?这不是给每个组提供元素名,op也需要元素名too@MKhalidJunaid非常感谢。我看到了一个关于group_concat on的简单解释,并得到了它。那么,我怎样才能包含不相关的组和元素名称以及按组名称排序的顺序呢?
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)