0

単一のテーブルからの MySQL クエリからのデータが入力されたテーブルが php ページにあります。

テーブルは次のようになります。

Location    Jan Feb Mar etc…    Total
Location1   5   13  7       25
Location2   10  10  6       26  
Location3   22  1   7       29
Etc…

「合計」は、Sum ie SUM(IF(month = '1', 1,0)) AS 'jan', SUM(IF(month = '2', 1,0)) ASfebを使用したクエリによって計算されます, SUM(IF(month = '3', 1,0))

私が欲しいのは、各列(1月、2月、3月など)の合計です

値が抽出されたときに値を追加することで PHP でこれを行うことができますが、クエリで行うことはできますか?そうする利点はありますか?

レンダリングされたヘルプを前もって感謝します。

4

2 に答える 2

1

私にとって、これはデータベースの奇妙なレイアウトですが、通常は次の行に沿って行ベースのアプローチを使用します。

location   | month | total |
loc1       |   1   |  3    |
loc2       |   1   |  4    |
loc1       |   2   |  7    |
etc...

これにより、合計などの実行がはるかに簡単になります。

ただし、構造を考えると、現在行っていることを続行するか、ちょっとしたトリックを使用することができます。PHP でより多くの作業を行っている場合 (合計だけを除いて)、SQL で簡単に実行して、配列に入れるconcat()準備ができている事前にフォーマットされた文字列を取得できますexplode()。そこから、PHP のすべてのすばらしい配列関数を使用して、合計などを取得できます。

編集:そうです、それはいくつかの違いを生みます。

データの保存に通常の行ベースのアプローチを使用している場合は、おそらくデータベースにすべての作業を行わせることができます。個々の月と合計を取得するクエリが必要な場合は、もちろん PHP でも実行できますが、次のようなちょっとしたトリックも実行できます。

select
    month, // assuming 1-12 for example
    sum(someData)
from
    yourTable
where
    someCondition=1
group by
    month
union all
select
    13 as month, // assuming 1-12 for example
    sum(someData)
from
    yourTable
where
    someCondition=1
group by
    month

これは、空き CPU が大量にある DB があるが、Web サーバーが苦労している場合や、集計する必要がある非常に大量のデータがある場合に便利です。データベースにクランチを実行させ、それを PHP コードで識別できる特定の数値として返すだけです。1 ~ 12 か月が通常で、13 か月が合計です。

于 2012-08-02T08:39:49.557 に答える
0

言うのは難しいですが、それはコードの残りの部分に依存します。結果に対して何をしていますか?それらを出力するだけですか?クエリはどのくらい複雑ですか?

いずれにせよGROUP BY location, month ORDER BY month、PHP で結果行をループしてテーブルを作成します。(場所に月が含まれていない場合は何も返されないので、注意してください。)

于 2012-08-02T08:39:36.220 に答える