2011-12-09 7 views
3

私は以下のコードを持っています。可能性のあるタイプミスは3列を選択する必要があります。mysql(PHP経由)で同じことを達成するより効率的な方法がありますか?

 SELECT COUNT(B.F_FACTOR) AS RANK, A.F_OPPOSITION, A.F_FACTOR 
     FROM 
      (
      SELECT 
      F_OPPOSITION, 
      IF(SUM(F_RESULT='L',=1,1,0) AS F_NUM, 
      IF(SUM(F_RESULT IN ('W','D','L'),=1,1,0) AS F_DENOM, 
      ROUND(SUM(F_NUM/F_DENOM),2) AS F_FACTOR 
      FROM $table 
      GROUP BY F_OPPOSITION 
     ) A, 
      (
      SELECT 
      F_OPPOSITION, 
      IF(SUM(F_RESULT='L',=1,=1,=0) AS F_NUM, 
      IF(SUM(F_RESULT IN ('W','D','L'),=1,=1,=0) AS F_DENOM, 
      ROUND(SUM(F_NUM/F_DENOM),2) AS F_FACTOR 
      FROM $table 
      GROUP BY F_OPPOSITION 
      ) B 
    WHERE A.F_FACTOR <= B.F_FACTOR 
      OR (A.F_FACTOR=B.F_FACTOR AND A.F_OPPOSITION=B.F_OPPOSITION) 
    GROUP BY A.F_OPPOSITION, F_FACTOR 
    ORDER BY A.F_RANK ASC, A.F_FACTOR DESC, A.F_OPPOSITION DESC; 

私がおそらく行いますれ、PHPでのスクリーニングに毎晩テーブルを更新してから、これを表示するには、そのテーブルから基本的な選択X、Y、Zを行うためにcronジョブとしてこれを実行することも可能です。

しかし、SQLの観点からもっと学ぶという点では、同じ出力を達成するために、タイピングと処理の両方で、より簡単で簡単です。

ありがとうございました。

答えて

1

夜間に作成されたテーブルを更新するためのcronジョブが追加されました。処理時間はごくわずかです。

0

データベースの結果を操作することは、サーバー側の言語(この例ではPHP)から同じ結果を達成するよりも、ほとんど常に高速です。だから、ただcrontabを実行してください。

+0

はい私は同意します。これは私が取る方法ですが、これは私が望んでいた質問に対する答えではありませんでした。同じ出力を得るために上記のステートメントをすぐに行う方法がありますか? – ChelseaStats

関連する問題