我想问一下,用一个mysql,怎样才能将asc_category中的"orange“名称更新为"oranges”,并将所有变量"fruit“更新为"fruits”?

此mysql只会更改特定asc_id行中的变量名称。
$sql = "UPDATE food SET asc_maincategory = '$asc_maincategory', asc_subcategory = '$asc_subcategory' WHERE asc_id = '$asc_id' ";谢谢..
发布于 2017-11-28 12:29:17
我们可以这样做:
UPDATE food
SET asc_subcategory = 'oranges'
WHERE asc_subcategory = 'orange'
;还有这个:
UPDATE food
SET asc_maincategory = 'fruits'
WHERE asc_maincategory = 'fruit'
;编辑
问:“可以使用一个mysql同时运行两个进程吗?”
答:是的,我们可以在一条SQL语句中执行这两个操作。SQL语法稍微复杂一点。
问:“因为我想要的是,当用户编辑橙子和水果的名称时,mysql会同时更新该asc_id的名称”橙子“,同时将asc_maincategory中所有的”水果“名称更新为”水果“。
答:如果我理解操作的规范,它听起来像是实现一个危险的操作。但这是可以做到的。
首先编写一条SELECT语句:
SELECT t.asc_id
, t.asc_maincategory
, t.asc_subcategory
, 'fruits' AS new_maincategory
, IF(t.asc_id=s.asc_id,'oranges',t.asc_subcategory) AS new_subcategory
FROM ( SELECT f.asc_id
, f.asc_maincategory
FROM food f
WHERE f.asc_id = '10001'
) s
JOIN food t
ON t.asc_maincategory = s.asc_maincategory
ORDER BY t.asc_id连接到食品表,以检索具有匹配asc_maincategory的所有行。
具有new_等别名的表达式将返回我们想要分配给列的新值。此表达式:
IF(t.asc_id=s.asc_id,'oranges',t.asc_subcategory)对于其他行,它返回asc_subcategory列的当前值。
如果我们将一列的当前值分配回相同的列(在同一行上),则不会产生任何更改。例如,如果bar是表foo中的一列,则可以运行以下语句
UPDATE foo t
SET t.bar = t.bar将列的当前值分配回自身,从而不会对列进行任何更改(除非存在任何BEFORE/AFTER UPDATE触发器。)
一旦SELECT语句生效,我们就可以将其转换为UPDATE语句:将SELECT ... FROM替换为关键字UPDATE并添加SET子句。
UPDATE ( SELECT f.asc_id
, f.asc_maincategory
FROM food f
WHERE f.asc_id = '10001'
) s
JOIN food t
ON t.asc_maincategory = s.asc_maincategory
SET t.asc_maincategory = 'fruits'
, t.asc_subcategory = IF(t.asc_id=s.asc_id,'oranges',t.asc_subcategory)一个重要的和(有点相关的)最后一个注释:
切勿将可能不安全的值合并到SQL文本中。
使用带有绑定占位符的预准备语句,或正确转义值,以使它们可以安全地包含在SQL中。
一个母亲的功绩(小波比表):https://xkcd.com/327/
OWASP SQL注入:https://www.owasp.org/index.php/SQL_Injection
发布于 2017-11-28 13:37:42
您可以通过使用CASE来实现这一点。WHEN...THEN。
UPDATE food
SET asc_subcategory = CASE
WHEN asc_subcategory = 'orange' THEN 'oranges'
ELSE asc_subcategory END,
asc_maincategory = CASE
WHEN asc_maincategory = 'fruit' THEN 'fruits'
ELSE asc_maincategory
END;如果asc_subcategory='orange',则将其更新为橙色,否则从数据库中获取相同的值。
如果asc_maincategory='fruit',则从DB中将其更新为fruits相同的值。
https://stackoverflow.com/questions/47524005
复制相似问题