我需要從表中拉幾行並處理它們在兩個方面:一個SQL查詢,或許多循環?
- 聚集在關鍵
- 行由行,有相同鍵
表排序看起來大致是這樣的:
table (
key,
string_data,
numeric_data
)
因此,我正在尋找兩種方法來編寫函數。
首先將拉動總數據使用一個查詢,然後對每個組行,由行數據的循環中再次查詢(以下是PHP類僞代碼):
$rows = query(
"SELECT key,SUM(numeric_data)
FROM table
GROUP BY key"
);
foreach ($rows as $row) {
<process aggregate data in $row>
$key = $row['key'];
$row_by_row_data = handle_individual_rows($key);
}
function handle_individual_rows($key)
{
$rows = query(
"SELECT string_data
FROM table WHERE key=?",
$key
);
<process $rows one row at a time>
return $processed_data;
}
或者我可以做一個大的查詢,並讓代碼完成所有的工作:
$rows = query(
"SELECT key, string_data, numeric_data
FROM table"
);
foreach ($rows as $row) {
<process rows individually and calculate aggregates as I go>
}
性能是不是在這個應用的實際的關注;我只是想編寫明智和可維護的代碼。
我喜歡第一個選項,因爲它更模塊化 - 我喜歡第二個選項,因爲它看起來結構簡單。是一種選擇比另一種更好還是它只是一種風格問題?
「允許使用更高效的GROUP BY方法」 - 怎麼樣?也許這個例子並不清楚,但如果我只使用一個SQL查詢,我認爲我可以*不使用GROUP BY,因爲我需要查看每一行 – 2009-06-03 18:08:07
您需要查看每一行並計算聚合。您正在使用GROUP BY,但使用您自己的GROUP BY。用PHP編寫的你的HASH TABLE幾乎不會比用C編寫的SQL Server更高效。 – Quassnoi 2009-06-03 18:10:09
你能告訴我一個查詢的例子,它可以讓我每一行*和*計算聚合?你在想自己加入嗎? – 2009-06-03 18:15:34