1

「報告された」列に基づいて、最も繰り返し発生する行を最初に選択する次のSQLがあります

 $datan = mysql_query("
   SELECT *, COUNT(reported) AS ct
   FROM profile_reports
   WHERE open = '1'
   GROUP BY reported
   ORDER BY ct DESC
   LIMIT 1
 ") or die(mysql_error());

SQL で、どの「レポーター」(それぞれがユーザーに関連付けられた数字) が有用なレポートの割合が最も高いかを確認することも必要です。これは、次のように決定されます。

((raction > 0 AND raction < 99 AND open = '0' AND reporter = 'reporter') / (reporter = 'reporter' AND open = '0')) * 100

...そして、パーセンテージが最も高い行を最初に表示します。初期レポーターが設定されていないため、少し注意が必要です。

サンプルテーブルは次のとおりです。

+----+----------+----------+-------+----------+
| id | reporter | reported | open  |  raction |
+----+----------+----------+-------+----------+
|  1 |       24 |    26    |  0    |  3       |
|  2 |       24 |    23    |  0    |  0       |
|  3 |       24 |    29    |  1    |          |
|  4 |       12 |    29    |  0    |  4       |
|  5 |       12 |    29    |  1    |          |
|  6 |       24 |    21    |  1    |  0       |
+----+----------+----------+-------+----------+

ユーザー 29 (列: 報告済み) に関するレポートが他にもあることを確認してから、(上記のコード行に基づいて) どのレポート ユーザー (列: レポーター) が最高の割合を持っているかを確認します。この場合はユーザー 12 です。レポートを表示する

4

1 に答える 1

3

実際には、条件の合計を取り、割るだけでかなり簡単です。「レポート」を正しく取得するには、インライン ビューを使用して最高のレポートを見つける必要があります。

SELECT pr.*, 
       ( Sum(pr.raction > 0 
             AND pr.raction < 99 
             AND pr.open = '0' 
             AND pr.reported = t.reported) / Sum(pr.reported = t.reported 
                                                 AND pr.open = '0') ) * 100 AS 
       usefull 
FROM   profile_reports pr, 
       (SELECT reported 
        FROM   profile_reports 
        WHERE  open = '1' 
        GROUP  BY reported 
        ORDER  BY Count(reported) DESC 
        LIMIT  1) t 
GROUP  BY reporter 
ORDER  BY usefull DESC 
LIMIT  1 

デモ

出力

| ID | REPORTER | REPORTED | OPEN | RACTION | USEFULL |
-------------------------------------------------------
|  4 |       12 |       29 |    0 |       4 |     100 |

私はあなたのためにすべてをしたわけではありません。除数がゼロの場合にどうするかを決める必要があります

MySQL以外のほぼすべてでCASEを使用する必要があることに注意してください

   SUM ( CASE WHEN raction > 0 AND .... THEN 1 ELSE 0 END) / ....
于 2012-07-12T22:26:38.763 に答える