MySQL: Insert data into table, some data comes from another table (relational)的其他问题
我上面的问题基本上问了"如何使用另一行中的信息"将一行插入表中。答案是使用如下的查询:
INSERT INTO user_config(cid, sid, value)
SELECT $cid, id, $value
FROM user_settings
WHERE mid='$mid' AND name='$name'
ON DUPLICATE KEY UPDATE value = $value;
我现在的问题是,我需要插入多行。对于我需要插入的每一行,$cid
,$value
,$mid
和$name
都有不同的值。例如,我可以运行以下(伪):
function x($cid, $mid, $name, $value){
// run query:
INSERT INTO user_config(cid, sid, value)
SELECT $cid, id, $value
FROM user_settings
WHERE mid='$mid' AND name='$name'
ON DUPLICATE KEY UPDATE value = $value;
}
x(1,'a','b');
x(2,'c','d');
x(3,'f','e');
问题是,这将运行3个查询,我希望能够在一个查询中执行此操作。可能吗?如果这有助于解决问题,我可以为$cid
,$mid
和$name
提供一个数组吗?
答案 0 :(得分:0)
据推测,x调用中的信息可以表示为数据库中各种表的选择。你的x调用列表看起来是一个表,其列是$ cid,$ mid,$ name,$ value,对吗? (你的x调用应该有4个参数而不是3个。)
将表的定义和产生x参数的查询作为具有列cid,mid,name,value的表。
然后修改问题中的选择,以便x选择在FROM中。当然,您可能不必使用子选择来表达更新;我只是在为您提供的sytax添加语法方面进行了描述。
更新
您可以将(可能是临时的)表格作为x选择。将该表放在FROM中。如果在收集多个x参数列表时表格就在附近,那么您可以在获得它时插入每个(cid,mid,name,value)。
INSERT INTO user_config (cid, sid, value)
SELECT cid, id, value
FROM user_settings s JOIN x
ON s.mid=x.mid AND s.name=x.name
ON DUPLICATE KEY UPDATE value = x.value;