我需要将批量数据添加到我的表'wp_usermeta'。数据是相同的,但每行只更改user_id。一个PHP示例是:
for($i = 1; $i < 10000; $i++){
mysql_query(
"INSERT INTO wp_usermeta ('user_id', 'meta_key', 'meta_value')
VALUES ($i, "key", "value")");
}
所以我为最多10,000个用户的每个用户添加一行,除了从迭代变量中获取的user_id之外,这是完全相同的。
有没有办法在mysql中更有效地做到这一点?
答案 0 :(得分:2)
这将在一个SQL语句中执行:
$sql="
INSERT INTO wp_usermeta ('user_id', 'meta_key', 'meta_value')
VALUES
";
for($i = 1; $i < 10000; $i++){
$sql.="($i, 'key', 'value'),";
}
$sql=rtrim($sql, ",");
请不要使用已弃用的mysql_
函数,而是使用mysqli_
或PDO
。
答案 1 :(得分:1)
没有办法避免每行的INSERT语句,但是,如果你一次完成所有这些(在单个查询中),它将比单独执行它们更快:
INSERT INTO wp_usermeta (user_id, meta_key, meta_value)
VALUES (1, 'key', 'value'),
VALUES (2, 'key', 'value'),
...
VALUES (10000, 'key', 'value');
每次查询完成后,MySQL都会更新索引。这是一个查询,因此仅在插入所有行后才更新索引。
即使单独执行插入操作,但使用预准备语句和绑定参数,也会比当前方法更快。
答案 2 :(得分:0)
试试此代码
<?php
$query = "INSERT INTO wp_usermeta ('user_id', 'meta_key', 'meta_value') VALUES ";
$user_details = array();
for($i = 1; $i < 10000; $i++){
$user_details[] = "(".$i.",'key','value')";
}
$query .= implode(",", $user_details);
mysql_query($query);
?>
答案 3 :(得分:0)
你可以用这句话来做:
INSERT INTO wp_usermeta (user_id, meta_key, meta_value)
SELECT
nums.n, 'key', 'value'
FROM (
SELECT
a.N + b.N * 10 + c.N * 100 + +d.N * 1000 + 1 AS n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) c
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d
ORDER BY n
) nums;
<强>解释强>
内部选择构建数字从1到10.000
<强> Demo 强>