【问题标题】:Need help on insert comma separated data in mysql database using PHP需要帮助使用 PHP 在 mysql 数据库中插入逗号分隔的数据
【发布时间】:2016-05-31 14:38:33
【问题描述】:

数据库表中已有的演示数据:

INSERT INTO `csvtbl` (`ID`, `SKU`, `Product_Name`, `Model`, `Make`, `Year_From`, `Year_To`) VALUES
(1, 'C2AZ-3B584-AR', 'Power Steering Pump Seal Kit (Eaton Pump)', 'Galaxie', 'Ford', '1960', '1965'),
(2, 'C2AZ-3B584-AR', 'Power Steering Pump Seal Kit (Eaton Pump)', 'Thunderbird ', 'Fordtrest', '1960', '1965');

我使用下面的代码并在表格中插入了逗号(,)分隔的年份:

INSERT INTO `diff_yearstbl` (`ID`, `SKU`, `Product_Name`, `Model`, `Make`, `Year`) VALUES
(1, 'C2AZ-3B584-AR', 'Power Steering Pump Seal Kit (Eaton Pump)', 'Galaxie', 'Ford', '1960,1961,1962,1963,1964,1965'),
(2, 'C2AZ-3B584-AR', 'Power Steering Pump Seal Kit (Eaton Pump)', 'Thunderbird ', 'Fordtrest', '1960,1961,1962,1963,1964,1965');

年份数据运行良好,但我想插入与年份相同的数据品牌和型号,但这次只需插入以逗号 (,) 分隔的数据,如下例使用 SKU 字段。所以需要将上面两条记录合并成一行,如下面的记录。

INSERT INTO `diff_yearstbl` (`ID`, `SKU`, `Product_Name`, `Model`, `Make`, `Year`) VALUES
(1, 'C2AZ-3B584-AR', 'Power Steering Pump Seal Kit (Eaton Pump)', 'Galaxie, Thunderbird', 'Ford, Fordtrest' '1960,1961,1962,1963,1964,1965');

以下是我所做的代码:

    $query = "select Year_TO - Year_From as diff_years, ID, SKU,Product_Name,Model,Make,Year_From,Year_To from csvtbl";
$result = mysql_query($query, $connect );

//$result = $db->query($select_test)->fetchAll();

if (count($result) > 0) 
{

    while($QryRow = mysql_fetch_assoc($result)) 
    {
        $diff_years = $QryRow['diff_years'];
        $Year_From = $QryRow['Year_From'];
        $SKU = $QryRow['SKU'];
        $Product_Name = $QryRow['Product_Name'];
        $Model = $QryRow['Model'];
        $Make = $QryRow['Make'];

        $years= array();
        for ($x = $QryRow['Year_From']; $x <= $QryRow['Year_To']; $x++) 
        {           
            $years[] = $x;    
        }

        $query_insert = "INSERT INTO diff_yearstbl(SKU,Product_Name,Model,Make,Year) VALUES('".$SKU."','".$Product_Name."','".$Model."','".$Make."','".implode('|',$years)."')";
        $s_insert = mysql_query($query_insert, $connect ); 
    }
} 
else 
{
    echo "<p>Nothing matched your query.</p>";
}

    ?>

请帮忙。

【问题讨论】:

  • $query_insert中切换单引号和双引号
  • 您想将年份与 make 合并成一行?
  • 你的数组里有几年了?
  • 是的,我想在年份列中插入所有年份,来 (,) 分隔。
  • 使用序列化插入数组值

标签: php mysql arrays database


【解决方案1】:

将插入代码移出 for 循环

【讨论】:

    【解决方案2】:

    单条SQL语句,最长可应对100年:-

    INSERT INTO diff_yearstbl(SKU, Product_Name, Model, Make, Year) 
    SELECT   SKU,
            Product_Name,
            Model,
            Make,
            GROUP_CONCAT(Year_From + tens.acnt * 10 + units.acnt) AS ayear
    FROM csvtbl
    CROSS JOIN (SELECT 0 AS acnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tens
    CROSS JOIN (SELECT 0 AS acnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) units
    WHERE (Year_From + tens.acnt * 10 + units.acnt AS ayear) <= Year_TO
    GROUP BY SKU,
            Product_Name,
            Model,
            Make
    

    【讨论】:

      【解决方案3】:

      将插入代码移出 for 循环

      while($QryRow = mysql_fetch_assoc($result)) 
          {
              $diff_years = $QryRow['diff_years'];
              $Year_From = $QryRow['Year_From'];
              $SKU = $QryRow['SKU'];
              $Product_Name = $QryRow['Product_Name'];
              $Model = $QryRow['Model'];
              $Make = $QryRow['Make'];
              $YearCountList = array();
              for ($x = 0; $x <= $Year_From; $x++) {
                  $YearCountList[] = $Year_From + $x;        
              } 
      
              $years=implode(',', $YearCountList); // insert comma separated values
      
              $query_insert = "INSERT INTO diff_yearstbl(SKU,Product_Name,Model,Make,Year) VALUES('".$SKU."','".$Product_Name."','".$Model."','".$Make."','".$years."')";
              $s_insert = mysql_query($query_insert, $connect );    
          }
      

      检查一下

      【讨论】:

      • @Nehal 如果我想插入 '".implode(',',$Make)."') 和 '".implode(',',$Model)."') 使用SKU。那么是否可以使用上面的代码来做到这一点。现在我想插入数据,如“(1,'C2AZ-3B584-AR','动力转向泵密封套件(伊顿泵)','Galaxie,Thunderbird','Ford,Fordtest''1960,1961,1962,1963, 1964,1965');"使用 SKU 字段。有可能吗?
      【解决方案4】:

      您应该从$QryRow['Year_From'] 循环到$QryRow['Year_To'] 并在插入它们之前将它们全部收集起来。

      $years= array();
      for ($x = $QryRow['Year_From']; $x <= $QryRow['Year_To']; $x++) 
      {           
          $years[] = $x;    
      }
      
      $query_insert = "INSERT INTO diff_yearstbl(SKU,Product_Name,Model,Make,Year) VALUES('".$SKU."','".$Product_Name."','".$Model."','".$Make."','".implode(',',$years)."')";
      $s_insert = mysql_query($query_insert, $connect ); 
      

      mysql_* 已弃用请使用 mysqli_* 或 PDO

      【讨论】:

      • 我使用上面的代码得到了解决方案。谢谢!
      • @NishantPatel 很高兴我能帮上忙。祝你今天过得愉快。也请注意mysql_* is deprecated
      • 如果我想使用 SKU 插入 '".implode(',',$Make)."') 和 '".implode(',',$Model)."') .那么是否可以使用上面的代码来做到这一点。现在我想要“(1,'C2AZ-3B584-AR','动力转向泵密封套件(伊顿泵)','Galaxie,Thunderbird','Ford,Fordtest''1960,1961,1962,1963,1964,1965 ');"使用 SKU 字段。有可能吗?
      • @NishantPatel 我认为这是可能的。你能更新你的问题吗?我不太明白你的下一个问题/问题。
      • 我已经更新了我的问题。请查看并给我回复..谢谢
      猜你喜欢
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-04
      • 1970-01-01
      • 2014-04-09
      • 1970-01-01
      相关资源
      最近更新 更多