让我说我检查是否
$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
由于
答案 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);