Php 比较表字段值以在数据库中插入新值

Php 比较表字段值以在数据库中插入新值,php,mysql,Php,Mysql,我继承了一个现有数据库结构的网站。我有一个表(TABLE1),其结构如下: POSITION_1_TAGS_PERMITTED | POSITION_2_TAGS_PERMITTED | POSITION_3_TAGS_PERMITTED ---------------------------------------------------------------------------------- CD | EN,CS

我继承了一个现有数据库结构的网站。我有一个表(
TABLE1
),其结构如下:

POSITION_1_TAGS_PERMITTED  | POSITION_2_TAGS_PERMITTED | POSITION_3_TAGS_PERMITTED
----------------------------------------------------------------------------------
CD                         | EN,CS                     | TECH,CS
TABLE1
的这种结构最多有20列

然后我有另一个表(
TABLE2
)存储所选值(也有20列):

我有所选变量的标记。在这种情况下,我的变量的标记是
CS
。我想在
表1
中找到具有允许标记的位置,然后在
表2
中查看该位置是否已包含条目。在这种情况下,它会将位置3标识为要将我的条目添加到的列,然后我会编写一个新的update语句将该条目添加到数据库中。有没有一种简单的方法可以使用我数据库的列格式来实现这一点

编辑:如果变量有多个标记,我希望它在“允许的标记”列中搜索其中的任何值。我尝试将我的SQL语句更新为如下内容:

SELECT eventid, 
CASE 
WHEN (FIND_IN_SET("S&P", POSITION_1_TAGS_PERMITTED) OR FIND_IN_SET("CS", POSITION_1_TAGS_PERMITTED)) AND POS1_SEL_SYMBOL = ""
THEN 1 
END AS found_col 
FROM TABLE1 
JOIN TABLE2 
USING (eventid) 
WHERE EVENTID='159'
这个查询并没有给我和搜索CS一样的结果

SELECT eventid, 
    CASE
        WHEN FIND_IN_SET('CS', POSITION_1_TAGS_PERMITTED) AND POS1_SEL_SYMBOL = ''
        THEN 1
        WHEN FIND_IN_SET('CS', POSITION_2_TAGS_PERMITTED) AND POS2_SEL_SYMBOL = ''
        THEN 2
        WHEN FIND_IN_SET('CS', POSITION_3_TAGS_PERMITTED) AND POS3_SEL_SYMBOL = ''
        THEN 3
        ...
        WHEN FIND_IN_SET('CS', POSITION_20_TAGS_PERMITTED) AND POS20_SEL_SYMBOL = ''
        THEN 20
    END AS found_col
FROM TABLE1
JOIN TABLE2 USING (eventid)

有关
UPDATE
查询的信息,请参阅,该查询可以使用上述结构进行调整,以便更新找到的字段,而不仅仅是返回列号。但是有20列,这个查询会变得很长。

使用标记CS,您如何决定位置2和位置3之间的位置?@criterJuice选择表2中的第一个空列。如果位置2为空,则我会将其插入其中。在本例中,位置2已满,因此需要转到位置3。是否有任何列将两个表中的行关联起来?这些表是否只有一行?如果没有,您如何知道表2中的哪一行应该与表1中的一行匹配?@Barmar Yes,抱歉。有一个EVENTID字段,它是链接两个表的键。你是如何了解SQL的?感谢您提供的
FIND_IN_SET
提示。为大脑准备的新食物。这很棒。如果我的标签上有我要搜索的多个标签呢?如果在这种情况下,
CS
CS,EN
。它会搜索两个位置允许的标签吗?您必须将两个
FIND\u-in\u-SET
调用与
结合起来:
FIND\u-in\u-SET('CS',位置允许的标签)和FIND\u-in\u-SET('EN',位置允许的标签)
,我试着像你说的那样做,因为它可以进入任何有允许标签的地方。我用我的尝试更新了我的问题,这样您就可以看到我尝试了什么。为什么您希望它给出与搜索
CS
相同的结果?关键是它还应该寻找标准普尔。
SELECT eventid, 
    CASE
        WHEN FIND_IN_SET('CS', POSITION_1_TAGS_PERMITTED) AND POS1_SEL_SYMBOL = ''
        THEN 1
        WHEN FIND_IN_SET('CS', POSITION_2_TAGS_PERMITTED) AND POS2_SEL_SYMBOL = ''
        THEN 2
        WHEN FIND_IN_SET('CS', POSITION_3_TAGS_PERMITTED) AND POS3_SEL_SYMBOL = ''
        THEN 3
        ...
        WHEN FIND_IN_SET('CS', POSITION_20_TAGS_PERMITTED) AND POS20_SEL_SYMBOL = ''
        THEN 20
    END AS found_col
FROM TABLE1
JOIN TABLE2 USING (eventid)