2017-08-18 3 views
1

Ich brauche ein wenig Hilfe mit MySQL in SQL oder PHP auswählen. Meine Situation: habe ich eine SQL-Tabelle wie dieseMySQL/PHP Zeilen-für-Zeile-Werte zusammenführen

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 

Jetzt habe ich php select (joomla), wenn Sie die Werte von 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(); 

Dann foreach Im Aufruf

foreach($query_rpo_organization_equity_entries as $rpo_organization_equity_entries) {} 

Alles funktioniert richtig, aber nicht so, wie ich es brauche. Diese foreach gibt 4 Arrays zurück, aber ich brauche Reihen zusammenführen/kombinieren nach Spalten "effektiv_von" UND "effektiv_to" (Wenn sie die gleichen Werte haben. Und organisation_id natürlich). Damit ich Reihe kombinieren mit IDs 1 und 2, und Zeilen mit IDs 3 und 4, und statt 4-Arrays habe ich nur 2 kombinieren/Merge-Arrays wie folgt

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

wie soll ich es tun? ist es besser, die SQL und dann in PHP zu lösen?

thx

+0

Siehe https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-very-simple- sql-query – Strawberry

Antwort

0

Das Ergebnis können Sie erhalten möchten mithilfe der GROUP BY Funktion mit MySQL erreicht werden.

In der Joomla docs sind sie ziemlich klar auf diesem. Sie verwenden die Funktion group() für Ihr Objekt.

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

In Ihrem Fall würden Sie wahrscheinlich Ihren Code in so etwas wie ändern:

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

ich nicht getestet haben, aber etwas in den Zeilen dieser Arbeit sollte.

+0

Hallo Peter. das funktioniert nicht. Wenn ich group by verwende, gibt SQL nur die IDs 1 und 3 zurück (nur Werte aus der Spalteninvestition, Spalte bezahlt ist NULL :() –

+0

Meine Vermutung ist, dass es mehr als 2 Zeilen möglich ist, richtig zu entsprechen? –

+0

Nr. jede Organisations-ID hat eine gerade Anzahl von Zeilen, wobei jedes Paar "verbunden" ist und das gleiche Datum in effective_from und effective_to hat. Ich verstehe nicht, warum die Datenbank so gemacht wird. Ich muss es verwenden. –