如何选择列中的某些数据并将其与其他列进行比较

时间:2014-12-18 16:55:01

标签: mysql sql select where

我想要实现的是将一个字段中的特定数据与另一个字段进行比较。这里的背景故事是,我运行的是一个arma服务器,它使用带有数据的SQL表并控制游戏项和玩家数据。我的最终目标是制作一个声明,删除玩家未登录x天的对象。

我关注的数据位于我的object.data表和worldspace列中。数据看起来像这样:

' [179.361,[3944.11,7453.54,0.355]" 12345678912345678"]'

我需要做的是选择" 12345678912345678"编号并将其与两列进行比较并输出相等的结果。

如果可以让select只查找结束号

,我会将CharacterID切换到worldspace
SELECT o.`Classname`
     , p.`PlayerName`
     , o.`CharacterID`
     , c.`LastLogin`
FROM `Object_DATA` o
    , `Player_DATA` p
    , `Character_DATA` c
WHERE p.`PlayerUID`=o.`CharacterID`
    AND c.`PlayerUID`=p.`PlayerUID`
    AND c.`Alive`=1
    AND o.`CharacterID` IN (SELECT `PlayerUID`
                            FROM `Character_DATA`
                            WHERE `Alive`='1'
                                AND DATE(`LastLogin`) < CURDATE() - INTERVAL 30 DAY)

以下选项有效,但数据与表格不匹配:

SELECT o.`classname`
     , p.`PlayerName`
     , o.`Worldspace`
     , c.`LastLogin` 
FROM `Object_DATA` o
    , `Player_DATA` p
    , `Character_DATA` c 
WHERE o.`Worldspace` LIKE '[%,[%,%,%],"123%"]'
  AND c.`PlayerUID`=p.`PlayerUID`
  AND c.`Alive`=1 IN (SELECT `PlayerUID`
                      FROM `Character_DATA` 
                      WHERE `Alive`='1'
                          AND DATE(`LastLogin`) < CURDATE() - INTERVAL 1 month)

最后我想知道的是,是否有办法在字段中选择数据并将该组信息与具有相似数据的另一列进行比较。 EX:playerUID将匹配&#34; 12345678912345678&#34;在世界空间。

希望足够清楚,我无法找到任何可以解释这个问题的地方。如果我错过了,我道歉。

1 个答案:

答案 0 :(得分:1)

我并非100%确定您正在寻找的内容,但如果您只想查找以该ID结尾的Worldspace值,请执行以下操作:

WHERE o.`Worldspace` LIKE '%_12345678912345678__'

OR

WHERE o.`Worldspace` LIKE '%"123%"]'

我的猜测是,如果你知道id总是在值的末尾,你真的不需要指定id之前的值。