需要帮助使用 PHP 在 mysql 数据库中插入逗号分隔的数据

Posted

技术标签:

【中文标题】需要帮助使用 PHP 在 mysql 数据库中插入逗号分隔的数据【英文标题】:Need help on insert comma separated data in mysql database using PHP 【发布时间】: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 合并成一行? 你的数组里有几年了? 是的,我想在年份列中插入所有年份,来 (,) 分隔。 使用序列化插入数组值 【参考方案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 我认为这是可能的。你能更新你的问题吗?我不太明白你的下一个问题/问题。 我已经更新了我的问题。请查看并给我回复..谢谢

以上是关于需要帮助使用 PHP 在 mysql 数据库中插入逗号分隔的数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ajax 和 PHP 插入数据库(mysql)

javascript代码中的数据插入mysql数据库

如何使用 PHP 和 MYSQL 在单个单元格数据库中插入/存储多个项目

PHP / MYSQL 插入数组 Foreach 循环

MySQL帮助:将数据插入两个表[关闭]

插入未发送到 MySQL 服务器的 PHP 表单数据