1
我有一個查詢,可以根據排名爲我選擇我的數據庫中的所有節目的位置。我需要將它們插入到「排名歷史」表看起來像這樣:用計數器插入多行到表
Table:Ranking_History
Ranking_id Show_id Date Position
1 3 1
2 18 2
3 2 3
事情目前,我正在通過PHP所有的位置,然後將其插入到我的數據庫。事情是這樣的:
$positions = Show::get_positions();
$pos = 1;
foreach ($positions as $key=>$val) {
INSERT INTO ranking_history (show_id, date, position) VALUES ('$val', CURDATE(), '$pos')
$pos++;
}
有沒有一種方法可以讓我避免運行多個查詢的開銷滯後,並插入到一個單一查詢呢?
就像INSERT...SELECT
聲明,但需要有某種計數器可以跟蹤當前的「行」。在這種情況下,開銷成本甚至是重要的考慮因素(我每天插入大約6000行)。我相當肯定它需要通過存儲過程完成,但對於該類別中的MySQL來說,這是相當新穎的。
如果你這樣做一次,然後包裹在foreach的交易,並在年底提交。我懷疑它會跑得快很多。我建議你不要改變查詢。時間運行需要多長時間。然後,您可以根據建議決定是否更改爲「單個查詢」。如果您將其轉換爲「準備好的查詢」並使用「綁定並執行」,那麼它會更快。 –