1

これが当面のタスクです。「reports」という名前の db テーブルがあり、このテーブルの列の 1 つは「submitted_by」です。この列には、レポートを送信した人のユーザー名が含まれています。

次に、投稿したレポートの数で並べ替えられたユーザー名のリストを表示する必要があります。したがって、次のようなものが出てくるはずです。

ユーザー | レポート


マーク | 25


ジョン | ジョン | 18


メアリー | 7

これを行うために、この PHP/MySQL コードを作成しました。これは非常に簡単ですが、これらを 1 つのクエリにマージできるかどうか疑問に思っていました。また、それによって効率が大幅に向上しますか?

$users=array();

$result=mysql_query("select id,submitted_by from reports group by submitted_by");
while($row=mysql_fetch_array($result)){
    $result1=mysql_query("select id,submitted_by from reports where submitted_by='$row[submitted_by]' ");
    $users[$row[submitted_by]]=mysql_num_rows($result1);
}

arsort($users);

そして、から各要素をエコーするだけ$usersです。

4

3 に答える 3

4

次のコードを試してください。

$users = array();

$result=mysql_query("SELECT id, submitted_by, COUNT(*) as cnt FROM reports GROUP BY submitted_by ORDER BY COUNT(*) DESC");

while($row=mysql_fetch_array($result)){
    $users[$row['submitted_by']] = $row['cnt'];
}
于 2012-05-23T13:53:08.497 に答える
0
$users = array();

$result = mysql_query("
SELECT id,submitted_by, COUNT(*) as amount 
FROM reports 
GROUP BY submitted_by
ORDER BY amount DESC
");

while($row = mysql_fetch_array($result))
    $users[$row['submitted_by']] = $row['amount'];

// arsort($users);
于 2012-05-23T13:52:42.023 に答える
0

試す:

$query = "SELECT id, submitted_by, COUNT(*) as numbers FROM reports GROUP BY submitted_by ORDER BY COUNT(*) DESC";

$result = mysql_query($query);

echo "<table><tr><th>User</th><th>Reports</th></tr><tr>";

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

  echo "<td>$row[submitted_by]<td>";
  echo "<td>$row[numbers]<td>";

}

echo "</tr></table>"
于 2012-05-23T13:59:42.120 に答える