Php 更新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

我有一个mysql表,如下所示:

##############################################
# 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);