1

ユーザーがプロファイル A または B に投票できる対モジュールをセットアップする必要があります。各レコードには、投票した人、勝った人、負けた人という 3 つの重要な値が保存されます。

ユーザー

  • id_user
  • 名前

ユーザー対

  • id_versus - 主キー
  • id_user - 投票者
  • id_user_winner - 明らかに勝者
  • id_user_loser - 敗者

これらのクエリを個別に実行することで、ユーザーの割合を計算できます。

  • $wins = 'SELECT COUNT(*) FROM user_versus WHERE id_user_winner = 6';
  • $loses = 'SELECT COUNT(*) FROM user_versus WHERE id_user_loser = 6';
  • $total = $wins + $loses;

つまり、%wins = $wins / $total

それでも、クエリを 1 つだけに最適化して、それをレポート クエリのサブクエリとして使用できると思います (これは、私が実際に支援を必要としているクエリです)。レポートは以下を返す必要があります。

指定されたユーザーの勝率よりも高い勝率を持つユーザーのリスト

この時点からどのように進めればよいかわかりません。どんなヒントでも役に立ちます。ありがとう!

4

1 に答える 1

2

1 人のユーザーの場合:

SELECT ifnull(wins, 0) wins, ifnull(loses,0) loses, 
       ifnull(wins, 0)+ifnull(loses,0) total, 
       ifnull(wins, 0) / ( ifnull(wins, 0)+ifnull(loses,0)) percent
FROM (
SELECT
 (SELECT COUNT(*) FROM user_versus WHERE id_user_winner = 6 ) wins,
 (SELECT COUNT(*) FROM user_versus WHERE id_user_loser = 6 ) loses
) subqry

すべてのユーザーの場合:

SELECT id_user_winner AS id_user, 
       ifnull(wins, 0) wins
       ifnull(loses,0) loses
       ifnull(wins, 0)+ifnull(loses,0) total, 
       ifnull(wins, 0) / ( ifnull(wins, 0)+ifnull(loses,0)) percent
FROM (
   SELECT id_user_winner AS id_user FROM user_versus 
   UNION
   SELECT id_user_loser FROM user_versus 
) u
LEFT JOIN
FROM (
  SELECT id_user_winner, count(*) wins
  FROM user_versus 
  GROUP BY id_user_winner
) w
ON u.id_user = id_user_winner
LEFT JOIN (
  SELECT id_user_loser, count(*) loses
  FROM user_versus 
  GROUP BY id_user_loser
) l
ON u.id_user = l.id_user_loser
于 2013-10-28T21:56:33.097 に答える