0

我有一个纵向数据的大型数据库(MS SQL Server),我正在查询该数据库以获取要在我的 Web 应用程序(PHP 驱动)中显示的信息。该数据库包含多年来许多高等教育课程的记录......但有时对于给定的年份/课程组合没有可显示的数据。当有人在没有特别选择年份的情况下点击 Web 应用程序时,我希望应用程序自动选择具有最多可用数据来显示的年份。

所以,这是我的问题......我是否应该查询数据库一次以获取所有年份的所有可用信息,然后遍历 PHP 中返回的数组以确定哪些年份有最好的可用数据?还是执行以下操作会更好,然后选择最好的数据年份,然后运行第二个 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

1

一个经过深思熟虑的 SQL 语句基本上总是比通过一个大数组排序来找到最好的数据要好。我想知道您的查询是否有效(如果有效,那么我想知道您的数据库是否是最优的)

然而,理想情况下,您将拥有一个包含汇总数据缓存的表,您可以从中快速检索此类汇总信息。根据原始数据更改的频率,这将需要每隔一段时间更新一次汇总数据(例如,当您更新原始数据时)。

于 2013-10-15T12:23:26.700 回答