0

みんなこれはmysqlテーブルの出力です。それは特定の病気のためにmonth(Value)取得するために表示されます。count(Total)今、私array()は12か月のphpを持っており、その配列と比較して、特定の月にテーブルから返されたデータがない場合は、その月の12か月 0の新しいデータを追加するか、テーブルから見つかった値を追加します。array()

Value | dname      | Total            
5     | Root Canal | 1         
8     | Root Canal | 1     

PHPの私のコード

foreach($ResultArray2[1] as $key => $val){       
if(empty($row_d['Value'])){
$ResultArray2[$i][$key] = '0';
else
$ResultArray2[$i][$row_d['Value']] = $row_d['Total'];

これは私が得るものです

     Array (
[1] => Array
    (
        [1] => 0
        [2] => 0
        [3] => 0
        [4] => 0
        [5] => 0
        [6] => 0
        [7] => 0
        [8] => 0
        [9] => 0
        [10] => 0
        [11] => 0
        [12] => 0
    )

[2] => Array
    (
        [5] => 1
        [8] => 1
    )

)。

これは私が必要とするものです配列(

[1] => Array
    (
        [1] => 0
        [2] => 0
        [3] => 0
        [4] => 0
        [5] => 0
        [6] => 0
        [7] => 0
        [8] => 0
        [9] => 0
        [10] => 0
        [11] => 0
        [12] => 0
    )

[2] => Array
    (

      [1] => 0
        [2] => 0
        [3] => 0
        [4] => 0
        [5] => 1
        [6] => 0
        [7] => 0
        [8] => 1
        [9] => 0
        [10] => 0
        [11] => 0
        [12] => 0
    )

)。

4

2 に答える 2

1

私があなたの質問を正しく理解しているなら、

$finalResult = array();
while($row = mysql_fetch_object($querResult)) {
   if(!is_array($finalResult[$row->dname]) {
      $finalResult[$row->dname] = array_pad(array(), 13, 0);
   } 
   $finalResult[$row->dname][$row->Value] = $row->Total;
}

基本的に、コードは特定の病気の配列がすでに存在するかどうかをチェックします。そうでない場合は、値0が埋め込まれたサイズ13 [0を無視する]の配列を作成し、外出先で値を更新します。ここで病気は外の配列の鍵になります。必要に応じて、疾患名から整数IDへのマップを使用できます。その場合

$finalResult[$map[$row->dname]][$row->value] = $row->Total;
于 2012-07-25T07:37:34.460 に答える
0
$counts = array_fill(1,12,0);
while ($row = mysql_fetch_assoc($res)){
  $counts[$row['Value']] = $row['Total'];
}

編集:すべての病気を取得したいように見えるので、次のようにすべてを 1 つのクエリとして実行する方が簡単な場合があります。

SELECT name,
SUM(IF(Value=1,1,0) as month1,
SUM(IF(Value=2,1,0) as month2,
SUM(IF(Value=3,1,0) as month3,
...
FROM tablename
GROUP BY name
于 2012-07-25T07:26:17.020 に答える