MySQL 如果 ROW2 包含 "string",则更改 ROW1

MySQL change ROW1 if ROW2 contains "string"

我在数据库中有一个项目列表。我有 item_nameis_tradable 列。我希望能够遍历 item_name 中的名称并检查它们是否包含某个字符串,例如"Gold"。如果它们包含该字符串,请将 is_tradable 从 'yes' 更改为 'no'。

例如:item_name "gold gloves" 包含 "gold",所以 is_tradable = "no"

我不确定如何检查 varchar 是否包含字符串。

我的 table shcema 是这样的:

[Item_name, varchar(255), PrimaryKey]    
[is_tradable, varchar(255) ]    
[other random rows not needed here]

例如:

[item_name: gold_gloves, is_tradable: yes]

我希望能够检查 item_name 是否包含 "gold" 以便我可以更改 is_tradable.

 [item_name: gold_gloves, is_tradable: no]

对您 mysql 结果进行两次迭代。

  • 首先用布尔值标记您要查找的字符串。
  • 如果 boolean == TRUE,则进行第二次迭代并进行修改。

您可以使用 like 运算符来检查名称是否包含 gold:

UPDATE my_table
SET    is_tradable = 'no'
WHERE  item_name LIKE '%gold%'

请注意,根据 table 的排序规则,LIKE 可能区分大小写,也可能不区分大小写。如果您不确定 table 中的值,您可以强制所有值都小写:

UPDATE my_table
SET    is_tradable = 'no'
WHERE  LOWER(item_name) LIKE '%gold%'

假设您熟悉连接细节和其他内容,并假设 table 名称是 items,您可以这样做:

使用 PDO:

// Assuming $db contains the connection
$stmt = $db->prepare("UPDATE items SET is_tradable='no' WHERE Item_name LIKE '%Gold%' OR Item_name LIKE %gold%");
$stmt->execute();

以上语句的作用是搜索 Item_name "contains" 字符串 Goldgold 的每一行,并设置该行的 is_tradable 列到 'no'.