Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL选择递增值的位置_Mysql_Select_Where_Where In - Fatal编程技术网

MySQL选择递增值的位置

MySQL选择递增值的位置,mysql,select,where,where-in,Mysql,Select,Where,Where In,我有一个DB,它保存带有位置标识符的单词。例如,以下字符串: 敏捷的棕色狐狸跳过了懒狗 位置标识符将是: 快的 棕色的 狐狸 跳跃 结束 懒惰的 狗 我想完成的是,我选择一个字符串,其中Fox后面紧跟跳跃。我使用以下MySQL语法: SELECT PositionIdentifier FROM TableName WHERE Word='Fox' OR PositionIdentifier + 1 IN (SELECT PositionIdentifier

我有一个DB,它保存带有位置标识符的单词。例如,以下字符串:

敏捷的棕色狐狸跳过了懒狗

位置标识符将是:

  • 快的
  • 棕色的
  • 狐狸
  • 跳跃
  • 结束
  • 懒惰的
  • 我想完成的是,我选择一个字符串,其中Fox后面紧跟跳跃。我使用以下MySQL语法:

    SELECT PositionIdentifier 
    FROM TableName 
    WHERE Word='Fox' 
       OR PositionIdentifier + 1 IN 
           (SELECT PositionIdentifier 
            FORM TableName 
            WHERE Word='Jumps'
           )
    
    然而,plus-one语句并没有像预期的那样工作

    我怎样才能做到这一点

    更新:

    好了,澄清一下。这是我的桌子:

    StringID Word Counter Positions 1 Fox 2 6|35 1 Jumps 4 7|12|36|46 1 Over 3 8|37|41 StringID字计数器位置 1福克斯2 6 | 35 1跳4 7 | 12 | 36 | 46 1比3 8 | 37 | 41 所以,从这个表格中,我想找出跟在狐狸后面的跳跃的位置。在这个例子中,我想检索6,7和8作为一对,35,36和37作为一对位置


    我希望这更清楚。Thx

    像这样试一试

    SELECT PositionIdentifier 
    FROM TableName 
    WHERE Word='Fox' 
       AND PositionIdentifier IN
           (SELECT (PositionIdentifier -1 ) AS PrevPosID
            FROM TableName 
            WHERE Word='Jumps'
           )
    

    假设您的PositionIdentifier列是一个INT-other,您可能必须强制转换减法结果

    使用PositionIdentifier+1作为联接条件在positions表上进行自联接,以获取
    跳转
    之后的字符串
    fox
    。我假设您的
    positions
    表有以下3个字段:

    • string_id:包含单词的字符串的标识符。字符串具有公共标识符的单词。如果您只是在PositionIdentifier字段上联接,那么您的结果可能不正确,因为多个字符串可能包含这两个单词

    • PositionIdentifier:标识单词在字符串中的位置

    • 单词:实际单词

    我将使用以下查询:

    select p1.string_id, p1.PositionIdentifier
    from positions p1
    inner join positions p2 on p1.string_id=p2.string_id and p1.PositionIdentifier+1=p2.PositionIdentifier
    where p1.Word='Fox' and p2.Word='Jumps'
    

    或者,如果您不需要“跳跃”记录中的任何详细信息,也可以使用
    exists()
    子查询。

    我尝试了您的sql,它看起来工作正常吗? 除了“FROM”拼写错误(FORM)和看起来像是“and”而不是“OR”这一事实之外

    SELECT PositionIdentifier FROM TableName WHERE Word='Fox' OR PositionIdentifier+1 IN (SELECT PositionIdentifier FROM TableName WHERE Word='Jumps')
    

    你能澄清一下你所说的“加一声明没有如预期那样起作用”是什么意思吗?

    谢谢你的回答,但是这不是我要找的内容哦,绝对是。绝对不是。然而,在某种程度上这正是我想要的,所以我要感谢您为解决方案做出的贡献。好的,我还想知道第二个单词的位置标识符。如果我不想找狐狸跳,但是狐狸跳到了树上怎么办。查询将快速增长,我需要所有的位置标识符returned@TVAvanHesteren那么你应该在你的问题中描述这些标准,而不是在随后对答案的评论中。顺便说一句,只要把p2.PositionIdentifier添加到选择列表中,你就有你的愿望了。是的,我理解。也可以让SQL从|符号分隔的字符串中选择位置吗?例如:职位是:| 6 | 58 | 74 | 97 |?请在自己的问题中适当地提出你的新问题。使你的数据结构正常化。谢谢你,伙计,我尝试了你的方法,通过一些调整,我能够使它工作,非常感谢。单词和职位存储在不同的表中,请参见上面的更新