【问题标题】:Insert multiple rows with one QUERY用一个 QUERY 插入多行
【发布时间】:2014-11-27 16:19:09
【问题描述】:

我在从 SELECT sql 获取信息然后将这种信息插入到我的数据库中时遇到了一些问题。现在的问题是我无法解决插入多行的问题。

我明白了,如果一个类别有更多的项目,它只插入一个项目,然后它也需要插入那么多次

我现在将这些项目排成一排,但我希望它们彼此之间

if($log1 = $log->fetch_object())
    {
while($loco = $log->fetch_object())
    {
$item .= "$loco->itemname";
    }
$logss = "INSERT INTO log_drops(`item`, mobname, game, log_id, log_name)VALUES('$item', '$mobname', '$game', '$id', '$name')";
if($result1 = $db->query($logss));
}

【问题讨论】:

  • $logss = "INSERT INTO log_drops(item, mobname, game, log_id, log_name) VALUES "; 在 while.... 之前而不是在 while: $logss.="('$item', '$mobname', '$game', '$id', '$name'), "; 在 while 之后添加 $logss =rtrim($logss ,', ')." ;"; 并执行它
  • 另外我不想修剪任何东西,因为我需要插入例如 2 个名为“ITEM 1, ITEM 2”的项目,但暴民名称、游戏、log_id、log_name 是相同的,我只需要更改item

标签: php mysql


【解决方案1】:

根据您获得的结果创建VALUES 字符串。您需要根据您的要求进行一些修改。但是,下面的例子会让你知道如何做到这一点:

$items = '';
while($loco = $log->fetch_object()){
    $items .= '('.$loco->itemname.',';
    $items .= // Some other variables those you want to insert...
    $items .= $loco->xyz.'),';
}
$new_data = rtrim($items, ',');
$clause = "INSERT INTO log_drops(`item`, mobname, game, log_id, log_name)
           VALUES $new_data";

那么之后你只需要执行一次插入查询。

【讨论】:

  • 你是指像$game, $mobname ectra 这样的其他变量吗?我是否需要在每行中添加每个变量,例如:`$items .='('.$game.',';`
  • 您不需要为所有其他变量打开括号。基本上,我们正在创建一个字符串,如下所示:(1,2,3),(4,5,6),(7,8,9)。输出$new_data变量并检查格式,然后再放入$clause
  • 这段代码不会带来确切需要的 id,变量 item 最终会以comma
  • @fasM 这就是为什么,我使用了rtrim($items, ',')
  • 我现在把这些物品放在一起,我真的很陌生。我编辑了我的开始主题
【解决方案2】:

试试这种风格,我总是从数组中获取我的值并创建sql

<?php
$values = '';  // store values to be inserted
$n=','; // string to manage  comma between chunk of values to be inserted
$numberOfValues=5; // values defind to be inserted
$count = 0;
$recordNum =mysqli_num_rows($log) - 1; //count number of records from 0
while($loco = $log->fetch_object()){
    if($count == $recordNum){ $n = ' '; }
    $values .= "('$loco->itemname','$loco->game','$loco->game','$loco->log_id','$loco->log_name') $n ";
    $count++;
}

$clause = "INSERT INTO log_drops(`item`, mobname, game, log_id, log_name)
           VALUES $values";
?>

【讨论】:

  • 它将所有项目添加到一行中,如果可能的话,我的意思是彼此之间。我还有一个关于$loco-&gt;xyz 的问题,xyz 代表什么?谢谢
猜你喜欢
  • 2011-01-27
  • 2011-05-08
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
  • 2011-12-29
相关资源
最近更新 更多