0

私は、Web アプリケーション (PHP 駆動型) に表示する情報を取得するために照会している縦断データの大規模なデータベース (MS SQL Server) を持っています。このデータベースには、何年にもわたる多くの高等教育プログラムの記録が含まれています...しかし、特定の年/プログラムの組み合わせについて表示可能なデータがない場合があります。誰かが特に年を選択せず​​に Web アプリケーションにアクセスした場合、表示するデータが最も多い年をアプリケーションが自動的に選択するようにしたいと考えています。

それで、ここで私の質問です...データベースに一度クエリを実行して、すべての年について利用可能なすべての情報を取得し、PHP で返された配列をループして、利用可能なデータが最も良い年を特定する必要がありますか? それとも、次のようなものを実行し、データの最良の年を選択してから、2 番目の SQL クエリを実行する方がよいでしょうか?

SELECT ProgYear, SUM(CASE WHEN WageDisp>0 THEN 1 ELSE 0 END) as WageCount,
                SUM(CASE WHEN UNCDisp>0 THEN 1 ELSE 0 END) as UNCCount,
                SUM(CASE WHEN CurrDisp>0 THEN 1 ELSE 0 END) as CurrCount,
                SUM(CASE WHEN ConEdDisp>0 THEN 1 ELSE 0 END) as ConEdCount
            FROM    (SELECT ProgID, ProgYear, SUM(CASE WHEN MAX(NumWage0, NumWage1, NumWage2, NumWage3, NumWage4, NumWage5, NumWage6, NumWage7, NumWage8)>0 THEN 1 ELSE 0 END) as WageDisp,
                        SUM(CASE WHEN MAX(UNC0, UNC1, UNC2, UNC3, UNC4, UNC5, UNC6, UNC7, UNC8)>0 THEN 1 ELSE 0 END) as UNCDisp,
                        SUM(CASE WHEN MAX(Curr0, Curr1, Curr2, Curr3, Curr4, Curr5, Curr6, Curr7, Curr8)>0 THEN 1 ELSE 0 END) as CurrDisp,
                        SUM(CASE WHEN MAX(ConEd0, ConEd1, ConEd2, ConEd3, ConEd4, ConEd5, ConEd6, ConEd7, ConEd8)>0 THEN 1 ELSE 0 END) as ConEdDisp)
            WHERE ProgID in (SELECT item from fnSplit(?, '|'))

PHP アプリケーションはローカル ホスト上の SQL Server にアクセスするため、データの送信時間は最小限に抑える必要があります。ヒント/ベストプラクティスについて疑問に思っています。

ありがとう!

4

1 に答える 1