0

我想从数据库中获取与给出单词相关的句子。假设这是一个 mysql 表。

id-      sentence  
1-     This is a web page  
2-     This is spiderweb   
3-     Here is a webspider     
4-     create anyWebPage  

这是一个简单的代码。

<?php  
     // ignore all syntax error in this code if present.
     $input = 'web';
     $sql = mysql_query("
            SELECT * FROM `table_name` 
            WHERE sentence LIKE('%$input%')
     ");
 // echo The given result.
 ?>

如果我使用LIKE %....%则显示所有结果。
如果我使用LIKE ...%Then 它不能给出任何结果,因为没有从我开始的句子$input = 'web';
我想得到那些世界从web开始的句子
要求的结果
1- 这是一个网页
3 - 这是一个webspider

请指导我如何获得喜欢这些结果。
谢谢........

4

5 回答 5

1

引号应该在它们周围%而不是在它们里面,比如LIKE('%$input%'). 请注意,您使用的任何字符串比较都取决于排序规则是区分大小写还是不区分大小写

默认字符集和排序规则是 latin1 和 latin1_swedish_ci,因此默认情况下非二进制字符串比较不区分大小写。这意味着如果您使用 col_name LIKE 'a%' 进行搜索,您将获得所有以 A 或 a 开头的列值。

mysql_已弃用,使用mysqli_or PDO::

您没有转义输入(SQL 注入)。

您正在声明$inpput和使用$input.

还要检查FULLTEXTMySQL中的搜索选项以优化速度。

或者,如果您只需要匹配整个单词,您可以REGEXP这样使用:

SELECT * FROM test WHERE sentence REGEXP '([^[:alnum:]]|^)$input([^[:alnum:]]|$)'

此处的示例1[^[:alnum:]]匹配除数字和字母(逗号、句号、破折号)和^/$字符串的开头/结尾之外的所有内容。

[ 1 ] 只是 pastebin,sqlfiddle现在已经关闭:-/

于 2013-04-14T17:27:36.197 回答
0

Nabheet 的回答是正确的,但它忽略了字符串的第一个单词以搜索词开头的情况(例如,“web”)。此查询解决了这两种情况:

$sql = mysql_query("SELECT * FROM `table_name` WHERE sentence LIKE "$input%" or sentence LIKE "% $input%" ;");

此查询中的第一个子句将检测句子中的第一个单词何时以搜索词开头,第二个子句将检测任何其他词何时以搜索词开头。

其他答案正确地指出了清理搜索词以防止 SQL 注入的重要性。

于 2013-04-14T17:37:29.613 回答
0

看起来空格字符需要成为您的 WHERE LIKE 标准的一部分。你可以把它放在 % 和 web.

于 2013-04-14T17:26:49.957 回答
0

看起来您想要进行全文搜索 - http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
它是使用语法完成的 -MATCH() ... AGAINST

SELECT * FROM `table_name` WHERE MATCH(sentence) AGAINST('$input*' IN BOOLEAN MODE)

note*是全文搜索中的通配符搜索。http://dev.mysql.com/doc/refman/5.1/en/fulltext-boolean.html

于 2013-04-14T17:29:20.000 回答
0
$sql = mysql_query("SELECT * FROM `table_name` 
                    WHERE sentence LIKE('% ". $input. "%')");

您应该添加空格字符。

于 2013-04-14T17:24:26.280 回答