如何检查mysql中是否已存在字符串(所有单词顺序选项)?

时间:2012-04-25 07:15:47

标签: php mysql sql

让我说我检查是否

 $strig = "how can i do this";

我的数据库中是否已存在所有单词订单选项? 喜欢: “我怎么能做到这一点” 要么 “我这样做可以怎么样” ... ...

我的数据库看起来像:

 id    string
  1    how can i do this
  2    hello how are you
  3    how i can do this world
  4    another title
 etc   etc

由于

6 个答案:

答案 0 :(得分:3)

可能的组合数量为n!(样本中为120),因此检查此字符串是否已存在是一项非常复杂的任务。
我建议使用以下算法:

  • 向表中添加新列StringHash
  • 在插入顺序上输入您的字符串(例如按字母顺序),计算其哈希并存储在StringHash中:
    "how can i do this" => "can do how i this" => md5("can+do+how+i+this")
  • 如果要检查数据库中是否存在某个字符串,请再次按上述方法计算其哈希并查询YourTable.StringHash上的数据库

答案 1 :(得分:2)

如果您只想在sql中修复此问题,这是一个棘手的问题,但除此之外:

正如@ er.anuragjain所说,您可以使用LIKE %word%进行查询,但是您的示例“3”也会受到影响。

所以,如果您有这样的查询:

SELECT * FROM table WHERE
     column LIKE '%how%' 
AND  column LIKE '%can%'
AND  column LIKE '%i%'
AND  column LIKE '%do%'
AND  column LIKE '%this%'

然后你也得到3号。所以你需要检查是否没有其他字样。你可以通过检查单词计数来做到这一点(如果你有5个单词并且你的所有单词都在那里,那么你就完成了。)

检查wordcount并不简单,但有一个技巧。来自几个来源*:

SELECT LENGTH(total_words) - LENGTH(REPLACE(total_words, ' ', ''))+1
FROM tbl_test;

应该做的伎俩。所以检查LIKE,检查wordcount,你就完成了。但我不确定这是一个非常好的解决方案:)

答案 2 :(得分:0)

您可以询问您要搜索的字符串是否包含:"how" and "can" and "I" and "do" and "this" 像这样的东西:(我不知道mysql中的语法,但看到了概念)

    if(string.contain("how")&&
       string.contain("can")&&
       string.contain("I")&&
       string.contain("do")&&
       string.contain("this"))
     {
       //you find the string
     }

答案 3 :(得分:0)

应该是mysql中的通配符调用

select * From tablename Where columnname LIKE '%how%' 

答案 4 :(得分:0)

如果您使用的是mysql,请尝试使用..

select * from tablename where columnname Like '%how%' AND columnname LIKE '%can%' AND columnname LIKE '%I'% AND columnname LIKE '%DO'% AND columnname LIKE '%This'%;

如果您在$string中拥有动态值,那么首先将其转换为按空格分割的数组。然后从数组中创建一个$condition变量并将其追加到select * from tablename其中并运行那个问题。

感谢

答案 5 :(得分:0)

您可以先使用正则表达式创建类似这样的函数

public function part($str){
    $str = str_replace('‌',' ',$str);
    $arr = explode(' ',$str);
    $rejex = '';
    foreach($arr as $item){
        $rejex .= "(?=.*$item)";
    }
    return $rejex;
}

然后使用sql正则表达式

$sql = "SELECT * FROM `table` WHERE `column` REGEXP ".part($str);