4

メインの結果クエリ内の算術合計の回答に基づいて結果を並べ替えたいと思います。つまり、次のようになります。

私の現在のコードは次のようになります。

$query  = "SELECT * FROM foo WHERE foobar='{$fobo}' ORDER BY id DESC";
$result = mysql_query($query);

 while($row = mysql_fetch_array($result))
 {

   $percent = round((100 * $row['wins'] / ($row['wins'] + $row['loses'])));

     echo 'blah blah blah' . $percent;

}

ご覧のとおり、現在 ORDER BY id:

$query  = "SELECT * FROM foo WHERE foobar='{$fobo}' ORDER BY id DESC";

しかし、答えをORDER BYしたいのですが、それ$percentはwhileループ内で計算されます。

クエリを作成して、メインの結果クエリの前に配置しようとしました:

$p  = "SELECT wins, loses FROM foo WHERE foobar='{$fobo}'";
$pr = mysql_query($p);

$pow = mysql_fetch_array($pr);
$percent = round((100 * $pow['wins'] / ($pow['wins'] + $pow['loses'])));

しかし、それは吐き出しました

警告: mysql_fetch_array() は、パラメーター 1 がリソース、ブール値であると想定しています

% の計算は、php の合計ではなく、メインのクエリ内で実行できると思いますが、そのクエリが何であるかはわかりません。

4

3 に答える 3

5

ループ内で値を計算percentageしてから別のループを使用してソートする代わりに、次のように 1 つのクエリで実行できます。

$query  = "SELECT foo.*,
                  ROUND((100 * wins / (wins + loses))) AS percentage
           FROM foo
           WHERE foobar='{$fobo}'
           ORDER BY percentage ASC";

$result = mysql_query($query);

while($row = mysql_fetch_array($result))
{
   echo 'blah blah blah' . $row['percentage'];
}
于 2012-09-12T07:59:19.960 に答える
2

次のような列番号を使用できます。

select
    col1,
    col2
    round((100*wins)/wins+loses)
from
    foo
where
    foobar='{$fobo}'
group by
    col1,
    col2
order by
    3
于 2012-09-12T07:59:25.710 に答える
2

order by 句で計算を実行できます

SELECT *
FROM tableName
ORDER BY ROUND((100*wins) / (wins+loses)) DESC
于 2012-09-12T08:02:06.577 に答える