[英]Insert distinct values only for one column
比如说,我有一个包含五列col1
、 col2
、 col3
、 col4
和user_id
。 现在,我有一组user_id
值,比如说一千。 我想插入数千条记录,其中只有不同的列值是user_id
。 如果有更简单的方法而不是制作一千个 ('col1value','col2value','col3value','col4value',someUserId) 并将它们连接insert into tbl (col1,col2,col3,col4,user_id) values
查询?
更新:我想它需要一些澄清
所以这是一个简单的例子。 假设我有一个带有字段event
和user_id
的events
表。 id 为 1、2、5、101、233、422 和 1000 的用户会发生一些call
事件。所以我需要在表中插入 7 条记录,所以它应该看起来像
+-------+---------+
| event | user_id |
|-------|---------|
| call | 1 |
| call | 2 |
| call | 5 |
| call | 101 |
| call | 233 |
| call | 422 |
| call | 1000 |
+-------+---------+
我想尽可能高效地在数据库方面进行操作。 到目前为止,我认为我必须进行这样的 SQL 查询:
insert into events (event,user_id) values ('call',1),('call',2),('call',5),('call',101),('call',233),('call',422),('call',1000);
然后执行单个查询
但也许有一些更简单有效的方法? 也许有 SQL 参数之类的东西?
我理解您的问题,您有大量不同的user_id
值要插入,但对于每条新记录,您都希望col1
、 col2
、 col3
和col4
具有相同的值。
实现这一点的最简单方法是为每一列设置一个DEFAULT
值:
ALTER TABLE mytable CHANGE `col1` `col1` INTEGER NOT NULL DEFAULT 1234
这将col1
的默认值设置为1234
。 我假设该列的数据类型为INTEGER
,您需要相应地更改它。
如果更改表不适合您,那么您仍然可以构建一个插入语句,在单个事务中插入所有记录:
$user_ids = array(5,6, 7, 8, 9, 10); // these are the user ids you want to insert
$default_vals = array(1, 2, 3, 4); // These are the default values used for col1, col2, col3 and col4
$con = new mysqli('mydomain', 'myuser', 'mypw', 'mydb');
$rows = array();
foreach ($user_ids as $id)
$rows[] = "(".implode(',', $default_vals).",$id)";
$sql = "INSERT INTO mytbl (col1, col2, col3, col4, id) VALUES " . implode(',', $rows) . ";";
$con->query($sql);
或者,如果出于学术原因,您宁愿编写一个INSERT
语句来完成整个工作,您可以这样写:
INSERT INTO mytbl (col1, col2, col3, col4, id)
SELECT * FROM
(SELECT 1, 2, 3, 4) AS DEFAULT_VALS,
(SELECT 5
UNION SELECT 6
UNION SELECT 7
UNION SELECT 8
UNION SELECT 9) AS USER_IDS
但是,最后一种方法确实不是很好。 无论是在可读性还是性能方面。
UNION
的SELECT INTO
方法花费了3.3481941223145 秒。不过选择很简单。
用 :
INSERT INTO tbl (col1,col2,col3,col4,user_id)
VALUES
(1,2,3,4,1000),
(2,3,4,5,1000),
(6,7,8,9,1000),
(1,2,3,4,1234),
(4,3,2,1,1235);
在user_id
字段上创建唯一索引。 使用INSERT IGNORE
或INSERT ... ON DUPLICATE KEY UPDATE
忽略user_id
重复插入。
有关详细信息,请参阅 MySQL 文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.