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

时间:2016-07-19 13:35:09

标签: php mysql

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

POSITION_1_TAGS_PERMITTED  | POSITION_2_TAGS_PERMITTED | POSITION_3_TAGS_PERMITTED
----------------------------------------------------------------------------------
CD                         | EN,CS                     | TECH,CS

TABLE1此结构最多包含20列。

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

POS1_SEL_SYMBOL | POS2_SEL_SYMBOL | POS3_SEL_SYMBOL | POS4_SEL_SYMBOL
---------------------------------------------------------------------
A               | AAPL            |                 | AA

我有选定变量的标签,在这种情况下,我变量的标签是CS。我想在TABLE1中找到具有允许标记的位置,然后查看TABLE2以查看该位置是否已有条目。在这种情况下,它会将位置3标识为要添加我的条目的列,然后我会编写一个新的更新语句以将该条目添加到数据库中。有没有一种简单的方法可以使用我的数据库的列格式?

编辑:如果变量有多个标签,我希望在其中搜索允许的标签列中的任何值。我尝试将我的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相同的结果。

1 个答案:

答案 0 :(得分:3)

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查询,请参阅SQL Insert in first empty column in a row MySQL error,以便您更新找到的字段,而不仅仅是返回列号。但是对于20列,该查询将变得非常长。