从多个值运行插入脚本

时间:2019-03-17 23:21:47

标签: php mysql sql

我正在尝试运行一个简单的脚本,该脚本执行以下操作:获取内容模块的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循环中?如果我只照原样跑步,我觉得那只适合一张唱片

2 个答案:

答案 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 .. VALUESINSERT 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));