首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL/PHP按行值合并行

MySQL/PHP按行值合并行
EN

Stack Overflow用户
提问于 2017-08-18 15:09:28
回答 1查看 357关注 0票数 1

我需要一些帮助与MySQL选择在SQL或php。我的情况:我有一个sql表,如下所示

代码语言:javascript
复制
ID | organization_ID | Investment | investment_curr | paid | paid_curr | effective_from | Effective_to
1 | 195001 | 5000 | EUR | NULL | EUR | 2010-06-23 | NULL
2 | 195001 | NULL | EUR | 5000 | EUR | 2010-06-23 | NULL
3 | 195001 | 2000 | SKK | NULL | SKK | 2007-08-01 | 2010-06-22
4 | 195001 | NULL | SKK | 2000 | SKK | 2007-08-01 | 2010-06-22

现在我有php select (joomla),当通过organization_id选择值时

代码语言:javascript
复制
$query_rpo_organization_equity_entries = $db->getQuery(true);
$query_rpo_organization_equity_entries
    ->select(array('organization_id',
                                    'investment_amount',
                                    'investment_currency',
                                    'paid_amount',
                                    'paid_currency',
                                    'effective_from',
                                    'effective_to'
    ))
    ->from($db->quoteName('rpo_organization_equity_entries'))
    ->where($db->quoteName('organization_id') . ' = '. $db->quote($rpo_id))
    ->order(($db->quoteName('effective_to') . ' IS NOT NULL'), $db->quoteName('effective_to') . ' DESC ');
$db->setQuery($query_rpo_organization_equity_entries);
$query_rpo_organization_equity_entries = $db->loadObjectList();

然后我调用foreach

代码语言:javascript
复制
foreach($query_rpo_organization_equity_entries as $rpo_organization_equity_entries) {}

一切工作正常,但不是我需要的方式。此foreach返回4个数组,但我需要按列"effective_from“和"effective_to”合并/组合行(如果它们具有相同的值。当然还有organization_id )。因此,我组合了ID为1和2行,以及ID为3和4的行,而不是4个数组,而只有2个这样的组合/合并数组

代码语言:javascript
复制
XY | 195001 | 5000 | EUR | 5000 | EUR | 2010-06-23 | NULL
XY | 195001 | 2000 | SKK | 2000 | SKK | 2007-08-01 | 2010-06-22

我怎么发动汽车呢?是不是先解决SQL再用php?

thx

EN

回答 1

Stack Overflow用户

发布于 2017-08-18 17:12:07

您希望得到的结果可以通过使用GROUP BY函数在MySQL中实现。

Joomla docs中,他们在这一点上非常清楚。您可以在对象上使用group()函数。

代码语言:javascript
复制
//Example
$query
->select( array('catid', 'COUNT(*)') )
->from($db->quoteName('#__content'))
->group($db->quoteName('catid'));

在您的示例中,您可能希望将代码更改为类似以下内容:

代码语言:javascript
复制
$query_rpo_organization_equity_entries = $db->getQuery(true);
$query_rpo_organization_equity_entries
    ->select(array('organization_id',
                                    'MAX(investment_amount)',
                                    'investment_currency',
                                    'MAX(paid_amount)',
                                    'paid_currency',
                                    'MAX(effective_from)',
                                    'MAX(effective_to)'
    ))
    ->from($db->quoteName('rpo_organization_equity_entries'))
    ->where($db->quoteName('organization_id') . ' = '. $db->quote($rpo_id))
    ->group('`organization_ID`, `effective_from`, `Effective_to`') //this is the one
    ->order(($db->quoteName('effective_to') . ' IS NOT NULL'), $db->quoteName('effective_to') . ' DESC ');
$db->setQuery($query_rpo_organization_equity_entries);
$query_rpo_organization_equity_entries = $db->loadObjectList();

我还没有测试过这一点,但这条线中的一些东西应该是有效的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45750555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档