MySQL:将多行数据插入表中,一些数据来自另一个表(关系型)

时间:2014-07-18 02:48:52

标签: php mysql insert relational-database insert-update

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提供一个数组吗?

1 个答案:

答案 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;
相关问题