需要帮助使用 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 数据库中插入逗号分隔的数据的主要内容,如果未能解决你的问题,请参考以下文章