我正在尝试运行一个简单的脚本,该脚本执行以下操作:获取内容模块的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循环中?如果我只照原样跑步,我觉得那只适合一张唱片
答案 0 :(得分:2)
您似乎正在寻找MySQL INSERT ... SELECT
syntax。
从文档中:
使用
INSERT ... SELECT
,您可以从SELECT语句的结果中快速向表中插入许多行,而SELECT语句可以从一个或多个表中进行选择。
查询:
INSERT INTO locationContent (page_id, display_id)
SELECT ?, id FROM locations WHERE active = 1
ON DUPLICATE KEY UPDATE active = 1
?
代表参数$pageID
(您确实想使用参数化查询和准备好的语句来保护代码免遭SQL注入)。
答案 1 :(得分:1)
您不能混合使用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));