1

ステータス列のあるテーブルがあります。ステータスは1〜8の数字です。

クエリを使用できます

SELECT status, COUNT(id) AS total 
FROM cart_orders 
GROUP BY status;

次のような結果を得るには:

status | total
1      | 10
2      | 15
3      | 8
4      | 51
5      | 65 
...

しかし、それは私がしなければならないデータが必要になるたびに意味します:

$status = array(1 => null, 2 => null, 3 => null, 4 => null, 
                5 => null, 6 => null, 7 => null, 8 => null);

foreach($rows as $row){
    $status[$row['status']] = $row['total'];
}

これは、多くのコードではありませんが、そうする必要はありませんが、

私が欲しいのは、クエリを変更して、次のような単一の行になるようにすることです。

1  | 2  | 3  | 4  | 5   
10 | 15 | 8  | 51 | 65 ...

だから私はただ行くことができます例えば$row['4']

これを行うために私が考えることができる唯一のことは、各列をサブクエリとして持つことです。これは、8つのサブクエリを持つよりもコードを使用する方がよいでしょう。もう1つのオプションは、テーブルを7回結合することですが、それも理想的ではないと思われますか?

他にどのように私はこれを行うことができますか?

4

2 に答える 2

5

あなたが求めているのは「ピボットクエリ」と呼ばれ、残念ながらMySQLはネイティブでサポートしていません。次のように、各行を個別に指定する必要があります。

SELECT
   SUM(IF (status = 1, total, 0)) AS '1'
   ...

..しかし、これは非常に冗長です。特に、列が多い場合はそうです。PHPは、事前に配列を宣言する必要がないという点で、必要以上に冗長だと思います。

于 2012-11-12T01:44:09.407 に答える
1

変更したいのはクエリではなく、そこから取得した情報をどのように表示するかです。このようなものを試してください

// insert code to whatever defines your $rows variable

$string1 = "<tr>";
$string2 = "<tr>";
foreach($rows as $row) {
  $string1 .= "<td>" . $row['status'] . "</td>";
  $string2 .= "<td>" . $row['total'] . "</td>";
}
$string1 .= "</tr>\n";
$string2 .= "</tr>\n";

echo "<table border=\"1\">\n";
echo $string1;
echo $string2;
echo "</table>";
于 2012-11-12T01:43:51.157 に答える