1

テーブル構造について前もってお詫びします...しかし、それぞれが異なるユーザーの収集データに関連する複数のテーブルがあります。そのデータは継続的に収集され、発生するたびに行が追加されます...私が言ったように、この同様の構造を持つ複数のテーブルがあり、5列の10グループの平均値になりたいと思います。(fb1 + fb2 + fb3 + fb4 + fb5)/5 = q の 1 ~ 5 の平均....

列はそれぞれ、Web アプリケーション調査から得られた回答を参照し、すべて 1 ~ 10 の値が付けられます。これらの質問は 5 つのグループに分かれており、合計されてから 5 で除算されて平均値が求められます....

私が欲しいのはこれですが、すべてのテーブルのすべての列をループして、より大きなスケールで同じ結果を得ます。

以下に示すように、テーブルごとにこれの式がありますが、設定されていない数のテーブルをループして、複数のテーブルの値を考慮して同じ値を出力するにはどうすればよいですか?

    $query="SELECT AVG(fb1), AVG(fb2), AVG(fb3), AVG(fb4), AVG(fb5), AVG(fb6), AVG(fb7), AVG(fb8), AVG(fb9), AVG(fb10), AVG(fb11), AVG(fb12), AVG(fb13), AVG(fb14), AVG(fb15), AVG(fb16), AVG(fb17), AVG(fb18), AVG(fb19), AVG(fb20), AVG(fb5), AVG(fb5), AVG(fb5), AVG(fb5), AVG(fb5), AVG(fb5), AVG(fb5), AVG(fb5), AVG(fb5), AVG(fb5), AVG(fb5), AVG(fb5), AVG(fb21), AVG(fb22), AVG(fb23), AVG(fb24), AVG(fb25), AVG(fb26), AVG(fb27), AVG(fb28), AVG(fb29), AVG(fb30), AVG(fb31), AVG(fb32), AVG(fb33), AVG(fb34), AVG(fb35), AVG(fb36), AVG(fb37), AVG(fb38), AVG(fb39), AVG(fb40), AVG(fb41), AVG(fb42), AVG(fb43), AVG(fb44), AVG(fb45), AVG(fb46), AVG(fb47), AVG(fb48), AVG(fb49), AVG(fb50) FROM `".$_SESSION['table']."`";

$result=mysql_query($query);

while($row = mysql_fetch_array($result)){
$row1 = $row['AVG(fb1)'] + $row['AVG(fb2)'] + $row['AVG(fb3)'] + $row['AVG(fb4)'] +     $row['AVG(fb5)'];
$row2 = $row['AVG(fb6)'] + $row['AVG(fb7)'] + $row['AVG(fb8)'] + $row['AVG(fb9)'] + $row['AVG(fb10)'];
$row3 = $row['AVG(fb11)'] + $row['AVG(fb12)'] + $row['AVG(fb13)'] + $row['AVG(fb14)'] + $row['AVG(fb15)'];
$row4 = $row['AVG(fb16)'] + $row['AVG(fb17)'] + $row['AVG(fb18)'] + $row['AVG(fb19)'] + $row['AVG(fb20)'];
$row5 = $row['AVG(fb20)'] + $row['AVG(fb22)'] + $row['AVG(fb23)'] + $row['AVG(fb24)'] + $row['AVG(fb25)'];
$row6 = $row['AVG(fb26)'] + $row['AVG(fb27)'] + $row['AVG(fb28)'] + $row['AVG(fb29)'] + $row['AVG(fb30)'];
$row7 = $row['AVG(fb30)'] + $row['AVG(fb32)'] + $row['AVG(fb33)'] + $row['AVG(fb34)'] + $row['AVG(fb35)'];
$row8 = $row['AVG(fb36)'] + $row['AVG(fb37)'] + $row['AVG(fb38)'] + $row['AVG(fb39)'] + $row['AVG(fb40)'];
$row9 = $row['AVG(fb40)'] + $row['AVG(fb42)'] + $row['AVG(fb43)'] + $row['AVG(fb44)'] + $row['AVG(fb45)'];
$row10 = $row['AVG(fb46)'] + $row['AVG(fb47)'] + $row['AVG(fb48)'] + $row['AVG(fb49)'] + $row['AVG(fb50)'];

    $row1Avg = $row1 / 5;
    $row2Avg = $row2 / 5;
    $row3Avg = $row3 / 5;
    $row4Avg = $row4 / 5;
    $row5Avg = $row5 / 5;
    $row6Avg = $row6 / 5;
    $row7Avg = $row7 / 5;
    $row8Avg = $row8 / 5;
    $row9Avg = $row9 / 5;
    $row10Avg = $row10 / 5;

echo " all of those";

ps誰もが話しているこのPDO構文を使用せずにすべてを行ったので、不可能でない限り、PDOソリューション以外の助けを本当に感謝します.

4

1 に答える 1

1

最初に、配列$group[1]、$group[2]の $row1、$row2... を自由に変更して、実際の行と混同しないようにします。これらは行ではなく、実際には列のグループです。

まず、クエリ。私はそのようにはしません。あなたには明らかに進歩があるので、これを利用してみませんか?

//First, a couple of definitions.
$group=array();
$default=0;     //If there are no results, the default is 0
$k=0;

// The following query looks like this: SELECT AVG(fb1), [...], AVG(fb50) FROM `table`
$queryA="SELECT ";
for ($i=1; $i<50; $i++)
    $queryA.="AVG(fb".$i."), "
$queryA.="AVG(fb50) FROM `table`";
$resultA=mysql_query($queryA);

//I don't know all the other table's names, so I assume table2, table3 etc.
//EDIT THIS. Add the code in brackets as many times as tables (with the respective names $queryC, $queryD... and the $resultC, $resultD...):
{
$queryB="SELECT ";
for ($i=1; $i<50; $i++)
    $queryB.="AVG(fb".$i."), "
$queryB.="AVG(fb50) FROM `table2'`";
$resultB=mysql_query($queryB);
}

$num=0;
//EDIT THIS. Add as many as needed. Gets which result is longer.
if (mysql_num_rows($resultA)>=$num)
    $num=mysql_num_rows($resultA);
if (mysql_num_rows($resultB)>=$num)
    $num=mysql_num_rows($resultB);

//Then, the while loop:
for($a=0; $a<$num; $a++)
    {
    //EDIT THIS. Add as many as needed
    $rowA = mysql_fetch_array($resultA)
    $rowB = mysql_fetch_array($resultB);

    // Repeat it 50 times
    for ($j=0; j<50;j++)
        {
        //EDIT THIS. Add as many as tables suming up.
        $group[$k]+=$rowA["AVG(fb".$j.")"]+$rowB["AVG(fb".$j.")"];

        //EDIT THIS. Get the number to divide for the average
        if (!empty($rowA["AVG(fb".$j.")"])) $group["n".$k]+=1;
        if (!empty($rowB["AVG(fb".$j.")"])) $group["n".$k]+=1;

        //Checks if $j is 4, 9, 14, 19 etc (groups of 5 as 0 is included)
        if ($j%5==4)
            {
            $k++;
            }
    }

for ($i=1; $i<=5; $i++)
{
$group=(float) $group[$i]
$div=(float) $group["n".$i];
if ($div!=0)
    {
    $group[$i]=$group/$div;
    }
else $group[$i]=$default;
echo "<br>Group ".$i.": ".$group[$i];
}

ご覧のとおり、コピー/貼り付けでは機能しません。いくつかの異なる場所にすべてのデータを手動で入力すると仮定します。コメントに'EDIT THIS'と書かれている場所のすぐ下の行のみを編集してください。残りのコメントは説明であり、これ以上の作業は必要ありません。私はそれをテストしていませんが、すべてのテーブル名と必要なフィールドを手動で入力すればうまくいくと思います。

これは「良い」習慣ではありません。valuesと呼ばれるフィールドを追加してすべてのデータを 1 つのテーブルに配置し、同じフィールドとフィールドでcreator_id呼び出される別のテーブルを作成する方がはるかに優れています。次に、個々の調査を表示するために使用します。creatorscreator_idnameWHERE creator_id=$whatever

于 2012-04-12T02:08:23.927 に答える