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)