我正在尝试运行一个非常简单的脚本来执行以下操作:获取内容模块的ID并将其分配给多个位置
所以说我点击ID为123的内容模块上的链接,我想将其分配给所有多个位置。在SQL中,我只想说:
INSERT INTO table (cont_id,loc_id)
VALUES (123, select(id from location_table where active = 1))
我目前正在使用这个:
$pageID = $_GET['pageID'];
$assignPage = "
INSERT INTO locationContent(page_id, display_id)
VALUES ( '$pageID', select(id from locations where active = 1))
ON DUPLICATE KEY UPDATE active = 1
";
$performAssign = $mysqlConn->query($assignPage);
我想知道的问题是,我需要把它放到foreach或while循环中吗?如果我按原样运行,我觉得这只适用于一条记录
你不能混合INSERT INTO .. VALUES
和INSERT INTO ... SELECT
语法,但SELECT constant, var FROM ..
可能像:
$assignPage = $mysqlConn->prepare("
INSERT INTO locationContent(page_id, display_id)
SELECT :page as page_id, id FROM locations WHERE active = 1
ON DUPLICATE KEY UPDATE active = 1
";
$performAssign = $assignPage->execute(array('page' =>$pageID));
你似乎在寻找MySQL INSERT ... SELECT
syntax。
从文档:
使用
INSERT ... SELECT
,您可以从SELECT语句的结果中快速地将许多行插入到表中,该语句可以从一个或多个表中进行选择。
查询:
INSERT INTO locationContent (page_id, display_id)
SELECT ?, id FROM locations WHERE active = 1
ON DUPLICATE KEY UPDATE active = 1
?
代表参数$pageID
(您确实希望使用参数化查询和预准备语句来保护您的代码免受SQL注入)。