【问题标题】:How to get all values from a table which includes itself as another value neighbour field at the same table?如何从一个表中获取所有值,该表将自身作为同一个表中的另一个值相邻字段?
【发布时间】:2014-05-13 16:24:15
【问题描述】:

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

我希望得到这样的结果:

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

我正在使用 MySQL 和 PHP。

【问题讨论】:

  • 您喜欢 1 列或单独列的结果?
  • 使用GROUP_CONCAT dev.mysql.com/doc/refman/5.0/en/… 和JOIN 链接表。你应该做的第一件事就是向我们展示你做了什么......
  • 我的意思是第一列是固体,第二和第三个土壤和(5,6,7)
  • 如何在记录中而不是在字段中连接值?

标签: php mysql sql


【解决方案1】:

你可以这样做

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

从 cmets 编辑

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

【讨论】:

  • 那么我如何包含不相关的组和元素名称并按组名排序?
【解决方案2】:

使用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

【讨论】:

  • 这不是为每个组提供元素名称,并且 op 也需要元素名称
  • @MKhalidJunaid 谢谢。我在mysqlperformanceblog.com/2013/10/22/… 上看到了关于 group_concat 的简单解释并明白了。
【解决方案3】:

只需加入并在子 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。

【讨论】:

    【解决方案4】:

    您可能还想试试这些:

    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)
    

    【讨论】:

      猜你喜欢
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      • 1970-01-01
      • 2020-12-11
      • 2019-05-25
      • 1970-01-01
      相关资源
      最近更新 更多