【问题标题】:MySQL JOIN associative column with multiples row values in arrayMySQL JOIN 关联列与数组中的多个行值
【发布时间】:2014-09-15 02:16:36
【问题描述】:

表 ORDEM

ord_id | name
1      -  'A'
2      -  'B'
3      -  'C'
4      -  'D'

表ORCAMENTO

orc_id | type
  10   -  'AA'
  20   -  'BB'
  30   -  'CC'
  40   -  'DD'

表 ORDEM_ORCAMENTO

id | ord_id | orc_id  
1  -   1    -   10
2  -   1    -   20
3  -   2    -   30
4  -   2    -   40

MySQL 查询:

SELECT o.*, oo.orc_id 
FROM ordem AS o
        INNER JOIN ordem_orcamento AS oo ON oo.ord_id = o.ord_id
ORDER BY o.ord_id ASC

得到的结果:

1 - 'A' - 10
1 - 'A' - 20
2 - 'B' - 30
2 - 'B' - 40 

需要的结果:

1 - 'A' - 10,20
2 - 'B' - 20,30

我想将 ORCMENTO 表中属于 ORDEM 表的所有 id 放入一个数组中...

我已经尝试了很多方法来解决它,但我没有成功......

【问题讨论】:

  • 只返回一个结果并在PHP中处理数组

标签: php mysql arrays inner-join associative


【解决方案1】:

GROUP_CONCAT 允许您选择一个组成逗号分隔的字符串

select o.ord_id, o.name, group_concat(oo.orc_id)
from ordem o
join ordem_orcamento oo on o.ord_id = oo.ord_id
group by o.ord_id, o.name
order by o.ord_id asc

【讨论】:

  • 完美,我使用 GROUP_CONCAT 没有 'group by' 并不能正常工作,但现在一切正常...... Tks
【解决方案2】:

你也可以用php构建一个数组,通过循环结果

$data = array();
foreach ($result as $res) {
    $data[$res->ord_id][] = $res->orc_id
}

//output: foreach ($data as $orderitem) echo implode(",",$orderitem);

【讨论】:

  • 可能是,但我认为它不会很好地工作...从数据库中获取干净的结果仍然是我性能的最佳选择...
  • 当然可以。但是如果您需要单独的 id 来执行某些操作(计数等),则每次都必须分解字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多