我有一个查询可以根据排名为我选择数据库中所有节目的位置。我需要将它们插入"排名历史记录"看起来像这样的表:
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
语句,但需要某种计数器可以跟踪当前的行#34;。在这种情况下,开销成本是否也很重要(我每天要插入大约6000行)。我相当肯定它需要通过存储过程来完成,但对于那个类别中的MySQL来说还是一个新手。
答案 0 :(得分:1)
插入可以采用多组值,因此首先创建它们,然后运行单个插入
$values='';
foreach ($positions as $key=>$val) {
$values .= "('$val', CURDATE(), '$pos'),";
$pos++;
}
$values=rtrim($values,','); //remove left over comma
$q="INSERT INTO ranking_history (show_id, date, position) VALUES ".$values;
//run $q