Php 更新mysql中分隔行中的类似值
我有一个mysql表,如下所示:Php 更新mysql中分隔行中的类似值,php,mysql,Php,Mysql,我有一个mysql表,如下所示: ############################################## # ID # TAG 1 # TAG 2 # TAG 3 # TAG 4 # TAG 5 # #--------------------------------------------# # 1 # A # B # C # D # E # # 2 # B # G # H # J # K
##############################################
# ID # TAG 1 # TAG 2 # TAG 3 # TAG 4 # TAG 5 #
#--------------------------------------------#
# 1 # A # B # C # D # E #
# 2 # B # G # H # J # K #
##############################################
假设我需要选择所有值为B的标签,并使其生效
问题:查询将如何做
感谢您的几项查询:
更新您的表集TAG1=其中TAG1='B';
更新表格集TAG2=其中TAG2='B';
更新表格集TAG3=其中TAG3='B';
更新表集TAG4=其中TAG4='B';
更新您的表集TAG5=其中TAG5='B';
一个问题:
更新您的表集
TAG1=当TAG1='B'时的情况,否则TAG1结束,
TAG2=当TAG2='B'时的情况,否则TAG2结束,
TAG3=当TAG3='B'时的情况,否则TAG3结束,
TAG4=当TAG4='B'时的情况,否则TAG4结束,
TAG5=当TAG5='B'时的情况,否则TAG5结束
-where子句是可选的,但防止更新每一行
其中TAG1='B'或TAG2='B'或TAG3='B'或TAG4='B'或TAG5='B'
没有什么是最优的,但两种方法都应该有效
从更一般的角度来看,考虑构建一个包含ID和其他相关数据的表,我猜想ID指的是一些东西,并构建一个引用它的标签表:
主表 id |其他 ----- 1|foo 2 |巴 标签 id | pos | val ------- 1 | 1 | A 1 | 2 | B 1 | 3 | C 1 | 4 | D 1 | 5 | E 2 | 1 | B 2 | 2 | G 2 | 3 | H 2 | 4 | J 2 | 5 | K 这样,您就有了一个规范化的模型,并且可以通过以下方式实现您的需求: 更新标记集val=其中val='B'您可以将此查询用于您的案例: 或更新为:
最好是。。。?最快的?最具可读性。。。?你必须检查每个列是否包含B:/i如果你不能更改表结构,我看不到更短的解决方案。因为你的模型远远不是最优的,我不会太在意构建一个次优查询来实现你显然不会一直做的事情。寻找最佳解决方案,从增强您的模型开始。@JoachimIsaksson对start进行有效查询会很好:@X.L.Ant和有效查询?你能提供吗?是的,如果桌子是那样做的那就太好了。。。第一个选择是正确的!Thanks@rdn87我提供了两种方法:一个查询或几个查询。你的观点是什么?没什么,但不是教程。。我认为你必须展示最好的方法,但你可以用一个query@rdn87是什么让你认为一个查询比几个查询更好?好吧,这可能取决于问题中未提供的许多参数。
UPDATE myTable
SET `TAG 1` = IF(`TAG 1` = 'B', '', `TAG 1`),
`TAG 2` = IF(`TAG 2` = 'B', '', `TAG 2`),
`TAG 3` = IF(`TAG 3` = 'B', '', `TAG 3`),
`TAG 4` = IF(`TAG 4` = 'B', '', `TAG 4`),
`TAG 5` = IF(`TAG 5` = 'B', '', `TAG 5`);
SELECT ID,
CASE TAG_1
WHEN 'B' THEN ''
ELSE TAG_1
END as TAG_1,
CASE TAG_2
WHEN 'B' THEN ''
ELSE TAG_2
END as TAG_2,
CASE TAG_3
WHEN 'B' THEN ''
ELSE TAG_3
END as TAG_3,
CASE TAG_4
WHEN 'B' THEN ''
ELSE TAG_4
END as TAG_4,
CASE TAG_5
WHEN 'B' THEN ''
ELSE TAG_5
END as TAG_5
FROM table;
UPDATE table
SET TAG_1 = IF(TAG_1 = 'B', '', TAG_1),
TAG_2 = IF(TAG_2 = 'B', '', TAG_2),
TAG_3 = IF(TAG_3 = 'B', '', TAG_3),
TAG_4 = IF(TAG_4 = 'B', '', TAG_4),
TAG_5 = IF(TAG_5 = 'B', '', TAG_5);