2

SQL クエリから結果を取得するスクリプトを作成しようとしています。各結果を通過するときに、$row[13] の名前がどうあるべきかを確認し、それが識別する各クエリ結果を通過するときに必要です。類似した名前で、その名前が表示された回数をカウントします。配列に同じ名前が何回出現するかをカウントして表示するループを考え出したと思いました。私が探している最終結果は

Operations - 87
Training - 32
HR - 12

しかし、このコードを実行した後:

      while($row = mysql_fetch_array($result_id))
  {
        $profile8 = mysql_query
                    ("
                        SELECT org
                        FROM cost_centers
                        WHERE cost_center = '$row[13]'
                    ")
                    or die(mysql_error());
                    $anymatches=mysql_num_rows($profile8);
                        while($pro8 = mysql_fetch_array($profile8))
                        {
                            $orgnames = $pro8[0];
                        }


                            $names[] = $orgnames;

                            $newArray = array_count_values($names);

                            foreach ($newArray as $key => $value) {
                                echo "$key - $value <br />";
                            }

  }

私はそれが次のように連続して数えることになります:

HR - 1 
HR - 1 
Communications - 1 
HR - 1 
Communications - 1 
- 1 
HR - 1 
Communications - 1 
- 2 
HR - 1 
Communications - 1 
- 3 
HR - 1 
Communications - 1 
- 4 
HR - 2 
Communications - 1 
- 4 
HR - 3 
Communications - 1 
- 4 
HR - 3 
Communications - 1 
- 4 
Operations - 1 
HR - 4 
Communications - 1 
- 4 
Operations - 1 
HR - 4 
Communications - 1 
- 5 
Operations - 1 
HR - 4 
Communications - 1 
- 6 
Operations - 1 
HR - 4 
Communications - 1 
- 6 
Operations - 2 
HR - 4 
Communications - 1 
- 6 
Operations - 3 
HR - 4 

したがって、グループ化してからカウントし、カウントを追加し続けると再グループ化するように見えます。これが理にかなっていることを願っています。事前に感謝します。

4

4 に答える 4

1

ループ内で毎回カウンターを印刷しているので、それは起こります。それがどうあるべきか:

<?php

while($row = mysql_fetch_array($result_id))
{
    $profile8 = mysql_query("
        SELECT org
        FROM cost_centers
        WHERE cost_center = '$row[13]'")
    or die(mysql_error());

    $anymatches=mysql_num_rows($profile8);
    while($pro8 = mysql_fetch_array($profile8))
    {
        $orgnames = $pro8[0];
        $names[] = $orgnames;
    }
}

$newArray = array_count_values($names);

foreach ($newArray as $key => $value) {
    echo "$key - $value <br />";
}

とにかく、最初の行のすべての行に対して新しいクエリを作成するのは良い選択ではありません。特にJOINと(あなたの場合は)COUNT演算子について、SQLをよりよく学ぶ必要があります。

于 2013-02-27T23:08:28.473 に答える
1

次のクエリを使用しないでください。

SELECT 
    SUM(IF(org='HR', 1, 0)) AS HRCount,
    SUM(IF(org='Communications', 1, 0)) AS ComCount,
    SUM(IF(org='Operations', 1, 0)) AS OpCount,
FROM cost_centers
WHERE cost_center = '$row[13]'

次に、呼び出して値にアクセスできます$row["HRCount"];

于 2013-02-27T23:08:01.117 に答える
0

これを試して :

SELECT cost_centers.org, count(*) FROM cost_centers WHERE cost_center = what_you_want GROUP BY cost_centers.org
于 2013-02-27T23:08:41.603 に答える
0

あなたは正しい軌道に乗っています。

しばらくする前に、配列を作成します。

$org = array();

次に、foreach で、$key を使用して新しい配列にキーを作成し、それを追加します。

foreach ($newArray as $key => $value) {
    $org[$key] += 1;
}

while($row = mysql_fetch_array($result_id)) ループが完了したら、別の foreach ループを作成して結果を表示します。

foreach($org as $name => $count){
    echo $name . " = " . $count . "<br />";
}
于 2013-02-27T23:21:54.213 に答える