首页 > 解决方案 > 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 的组合存在,请跳过它并继续下一个关键字。

标签: phpmysql

解决方案


假设您有以下字符串:

$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);
}

推荐阅读