php - PHP 或 MYSQL:批量编辑:result($_POST["keyword..and ID,放入新表,如果不存在,则跳过并继续
问题描述
(我有不同的问题我必须改变,只用 PHP 或 MYSQL。我找不到 MYSQL 解决方案,所以我正在努力获得一个 php 解决方案。)
当前结构:
一个产品表,其中包含许多关键字列,我为每个列展开和更新。但我不想再使用这些keyword1-keyword200 概念了。(所以,逗号列表问题已经用 PHP 解决了。)
表产品
ID_PRODUCT KEYWORDS_LIST keyword1 keyword2 ... keyword200
1 red,blue,green
2 red,blue,yellow
... ...
99000 black
我希望有:
table_PRODUCT_KEYWORDS
PRODUCT_ID KEYWORD
1 red
1 blue
1 green
2 red
2 blue
99000 black
当前结构: 我有一个旧的后端 php 批量脚本,它爆炸一个逗号列表,替换空格等。并为每个逗号分隔的关键字更新表 PRODUCTS,但我不再想要这个了。
批量编辑后的表产品:
ID_PRODUCT KEYWORDS_LIST keyword1 keyword2 ... keyword200
1 red,blue,..green red blue ... green
2 red,blue red blue
... ... ... ... ... ...
99000 black black
当前结构:使用 PHP:$exploded_Keyword = explode(",", $KEYWORDS_LIST);
<input type='text' name='keyword1".$res_id[$i]."' value='".$exploded_Keyword[1]."'>
..
<input type='text' name='keyword200".$res_id[$i]."' value='".$exploded_Keyword[200]."'>
...
select id_parent from structure where id=".(int)$res_id[$i];
...
for($i=0;$i<count($res_id);$i++)
{
$sql="update PRODUCTS set
keyword1='".result($_POST["exploded_Keyword1".$res_id[$i]])."',
*...*
keyword200='".result($_POST["exploded_Keyword200".$res_id[$i]])."'
where id_parent=".$res_id[$i];
$db->execute($sql);
}
但这是一个糟糕的概念(菜鸟),并且 php 代码不使用 ID_PRODUCT。我不知道如何将 ID_PRODUCT 和 KEYWORD 一起插入。因为我有逗号列表,所以我使用 PHP 展开,但我不知道如何将这些展开的关键字插入到新的 table_PRODUCT_KEYWORDS 中。当前的 php 代码确实将这些插入到我的旧表 PRODUCTS 中 –</p>
我希望有:
table_PRODUCT_KEYWORDS
PRODUCT_ID KEYWORD
1 red
1 blue
1 green
2 red
2 blue
99000 black
我已经创建了这个新表:
CREATE TABLE product_keywords (
product_id INT NOT NULL,
keyword VARCHAR(50) NOT NULL,
FOREIGN KEY (product_id) REFEREFENCES products (id),
UNIQUE INDEX (product_id, keyword)
);
更改 PHP 以插入我的新 table_PRODUCT_KEYWORDS ID + KEYWORD 并检查 ID+KEYWORD 是否已经存在,如果是,则跳过它,但继续下一个关键字,每个关键字。
KEYWORDS 的数量从 1 到 200。因此我必须考虑不应插入空的“exploded_KeywordXY(s)”。
= 如果 PRODUCT_ID 和 KEYWORD 的组合存在,请跳过它并继续下一个关键字。
解决方案
假设您有以下字符串:
$string="red,blue,cyan,magenta";
这是产品的关键字列表。这可以通过数据库上的 SELECT 查询来检索关键字列表字段上的产品 ID。还假设您在变量$product_id
中有一个产品 ID,可以再次使用关键字列表的相同查询来检索它
现在让我们用那个字符串创建一个数组。Explode 将为我们创建一个数组:
$string_arr=explode(',',$string);
现在让我们在关键字表中插入值。foreach 循环将负责对所有关键字执行相同的操作,无论它们的数量是多少:
foreach($string_arr as $keyword){
$sql="INSERT INTO product_keywords SET
product_id=$product_id, keyword='$keyword'"
$db->execute($sql);
}