我需要在SQL或php中选择MySQL的帮助。
我的情况:
我有这样的SQL表

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选择值时

$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

foreach($query_rpo_organization_equity_entries as $rpo_organization_equity_entries) {}


一切正常,但不是我需要的方式。此foreach返回4个数组,但我需要按列“ effective_from”和“ effective_to”合并/合并行(如果它们具有相同的值和course_的organization_id)。
这样我将ID为1和2的行组合在一起,将ID为3和4的行组合在一起,而不是4个数组,我只有2个这样的合并/合并数组

XY | 195001 | 5000 | EUR | 5000 | EUR | 2010-06-23 | NULL
XY | 195001 | 2000 | SKK | 2000 | SKK | 2007-08-01 | 2010-06-22


我该怎么办?最好解决SQL,然后在PHP中?

谢谢

最佳答案

您希望使用MySQL通过使用GROUP BY函数来获得结果。

Joomla docs中,他们对此很清楚。您可以在对象上使用group()函数。

//Example
$query
->select( array('catid', 'COUNT(*)') )
->from($db->quoteName('#__content'))
->group($db->quoteName('catid'));


在您的情况下,您可能希望将代码更改为以下内容:

$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();


我还没有测试过,但是应该可以使用。

关于php - MySQL/PHP按行值合并行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45750555/

10-11 05:22
查看更多