schildi: php, mysql abfrage mit mehrdimensionalem(?) ergebnis

Beitrag lesen

hallo.

ich arbeite gerade an einer abfrage, die ein ergebnis-array folgender art erzeugen soll:

  
$erg =  
array  
(  
  'erg1' =>  
     array(  
             'erg1a' => X  
             'erg2b' => X  
             'erg1c' => X  
          )  
  'erg2' =>  
    array(  
            'erg1b' => X  
            'erg1d' => X  
         )  
  'erg3' =>  
    array( ... )  
   ...  
)  

ich gehe hierzu so vor, dass ich eine abfrage mit 'group by spalte1, spalte2' vornehme, und sortiere danach das suchergebnis per php-schleife über array-schlüssel in das $erg-array ein. gleiche array-schlüssel werden dann ja automatisch zusammengefasst.

das sql-ergebnis sieht also beispielhaft so aus:

erg1 | erg1a | X
erg1 | erg1b | X
erg1 | erg1c | X
erg2 | erg1b | X
erg2 | erg1d | X
 ...

nun habe ich das problem, dass mein ergebnis, welches ich durch den php-schleifendurchgang erzeuge in der ergebnis-zeilenanzahl nicht mit dem originalen sql-ergebnis übereinstimmt.

ich muss vor erzeugung des eigentlichen suchergebnisses jedoch noch eine abfrage machen, wie viele datensätze, das ergebnis der sql-abfrage haben wird (wegen ergebnisseiten-darstellung). dies möchte ich gerne mit einem count(distinct *) erledigen, jedoch kann ich ja meines wissens kein group-by über 2 spalten über dieses count(distinct ...) abbilden?

kurz gesagt, ich will die anzahl der ergebniszeilen des folgenden SQL's vor der eigentlichen ausführung (am bestena ja über ein count(...)) abfragen:

  
SELECT a.*,  
b.*,  
c.*,  
d.*,  
e.platform_id, e.name AS platform_name, e.abbreviation AS platform_abbreviation, e.logo_url AS platform_logo_url, e.platform_type, e.img_logo_small AS platform_img_logo_small,  
g.option_id, g.name AS option_name  
FROM funds a  
LEFT JOIN fund_companies b ON a.company_id = b.company_id  
CROSS JOIN fund_company_alias_name c ON b.fund_company_alias_name_id = c.fund_company_alias_name_id  
LEFT JOIN fund_platform_fund_availability d ON a.isin = d.isin  
LEFT JOIN fund_platforms e ON d.platform_id = e.platform_id  
LEFT JOIN fund_extending_options_availability f ON a.isin = f.isin  
LEFT JOIN fund_extending_options g ON f.option_id = g.option_id  
WHERE b.activated = 'Y'  
GROUP BY a.isin, e.platform_id  
ORDER BY a.name ASC  
LIMIT 0, 25  

ausserdem noch meine frage, ob man ein derartiges sql-ergebnis, wie ich es im endeffekt haben möchte (siehe php-array) auch anders - evtl. direkt mit mysql oder auf eine geschicktere art und weise hinbekommen könnte.