2011-05-19 12 views
1

オープンソースソフトウェアのマニュアル、試行錯誤、およびリバースエンジニアリングを使用して学習しているので、私に優しくおねがいします。MySQLからPHPへのアレイの重複値のグループ化

私は(それが結合テーブルからの合計とカウントを含んでいるとして、クエリがすでに非常に複雑である)は、次のようなテーブルを返しますMySQLのクエリを持っている:

DATE  ANSWER CATEGORY COUNT 
2011-01-01  Y  CAT1  22 
2011-01-01  Y  CAT2  220 
2011-01-01  N  CAT1  14 
2011-01-01  N  CAT2  530 
2011-01-02  Y  CAT1  50 
2011-01-02  Y  CAT2  270 
2011-01-02  N  CAT1  18 
2011-01-02  N  CAT2  576 

私は、単一の行にすべてを取得する必要がありますこのよう

DATE  Total Y  Total N  Total Cat1 Total Cat2 Total Overall 
2011-01-01  242   544   36   750   786 
2011-01-02  320   594   68   750   846 

として日付今、私は私がそうのようなフィギュアで遊ぶことができるように多次元配列にグループにそれらを必要とするつもりですこれらの図を取得すると仮定します。

Array 
(
2011-01-01 => Array (
    Y => Array(
     [CAT1] = 22 
     [CAT2] = 220 
     ) 
    N => Array(
     [CAT1] = 14 
     [CAT2] = 530 
     ) 
    ) 
2011-01-02 => Array (
    Y => Array(
     [CAT1] = 50 
     [CAT2] = 270 
     ) 
    N => Array(
     [CAT1] = 18 
     [CAT2] = 576 
     ) 
    ) 
) 

これは私が立ち往生している場所です。このインスタンスの配列にデータを取得するためにforeachループを見つけ出すことができないようで、一度そこにいたら、テーブルに表示するにはどうすればいいですか?

ご協力いただければ幸いです。

答えて

1
SELECT 
    DATE, 
    SUM(CASE ANSWER WHEN 'Y' THEN COUNT ELSE 0 END) AS TotalY, 
    SUM(CASE ANSWER WHEN 'N' THEN COUNT ELSE 0 END) AS TotalN, 
    SUM(CASE CATEGORY WHEN 'CAT1' THEN COUNT ELSE 0 END) AS TotalCat1, 
    SUM(CASE CATEGORY WHEN 'CAT2' THEN COUNT ELSE 0 END) AS TotalCat2, 
    SUM(COUNT) AS TotalOverall 
FROM subquery 
GROUP BY DATE 
+0

ニースは、私のすべてのサブよりもはるかに良いケース+1を使用するとは思わなかった –

+0

優秀なアンドリー、それは治療を働いた、ありがとう! – Leseul

0

SQLデータベースから直接必要なデータを取得できます。

試してみてください。

SELECT `DATE`, ANSWER, SUM(`COUNT`) as TOTAL 
FROM table -- Change this! 
GROUP BY `DATE`, ANSWER 

そして、カテゴリ別に合計を取得するために、カテゴリ別に答えを交換してください。

+0

多くの謝罪 - 私のようなルックスを質問はあまりにも漠然としていました.SQLクエリは、複数の別個のテーブルからの値の合計とカウントを含めて、それが大事にすることができるほど複雑です。 プラスこれは私に私のカテゴリを与えるだろうか? – Leseul

+0

本当に、Leseulが示唆するようにグループを見てください。 DBMS +適切なSQLクエリは、あなたが望むような形で結果を返すように設計されています。 –

1

クエリ自体から結果を得ることができます。

私はそれが最適なクエリではありません知っているが、それはあなたが

SELECT theDate AS `DATE`, 
    (SELECT SUM(theCount) FROM st WHERE theAnswer = 'Y' AND theDate = a.theDate) AS 'Total Y', 
    (SELECT SUM(theCount) FROM st WHERE theAnswer = 'N' AND theDate = a.theDate) AS 'Total N', 
    (SELECT SUM(theCount) FROM st WHERE theCategory = 'CAT1' AND theDate = a.theDate) AS 'Total Cat1', 
    (SELECT SUM(theCount) FROM st WHERE theCategory = 'CAT2' AND theDate = a.theDate) AS 'Total Cat2', 
    (SELECT SUM(theCount) FROM st WHERE theCategory IN('CAT1','CAT2') AND theDate = a.theDate) AS 'Total Overall' 
FROM st AS a 
GROUP BY theDate 

結果欲しいものを解決する方法についてのアイデア与えることです:

DATE  Total Y  Total N  Total Cat1 Total Cat2 Total Overall 
2011-01-01  242   544   36   750   786 
2011-01-02  320   594   68   846   914 
+0

Phillに答える時間をとってくれてありがとう。あなたのソリューションもうまくいきますが、私は最後にAndriyのために解決しました。 – Leseul