我想从数据库中获取与给出相关的句子。 假设这是一个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 ...%
那么它就无法给出任何结果,因为没有从$input = 'web';
开始的句子
我希望从 web 中获得那些世界开始的句子
要求结果
1-这是网络页面
3 - 这是 webspider
请指导我如何得到这些结果。
感谢........
答案 0 :(得分:1)
Quotes should be around %
不在其中,例如LIKE('%$input%')
。请注意,无论您使用哪种字符串比较,都取决于collation is case sensitive or insensitive:
默认字符集和排序规则是latin1和 latin1_swedish_ci,所以非二进制字符串比较就是这种情况 默认情况下不敏感。这意味着如果使用col_name进行搜索 像'a%'一样,您获得以A或a开头的所有列值。
您没有转义输入(SQL Injection)。
您宣布 $inpput
并使用$input
。
同时检查FULLTEXT
search options in MySQL以获得速度优化。
或者,如果您需要匹配整个单词 ,您可以使用REGEXP
,如下所示:
SELECT * FROM test WHERE sentence REGEXP '([^[:alnum:]]|^)$input([^[:alnum:]]|$)'
Example here 1 其中[^[:alnum:]]
分别匹配除数字和字母(昏迷,句号,破折号)和^/$
字符串开头/结尾之外的所有内容。
<子> [ 1 ]只是pastebin,sqlfiddle现在正在关闭: - / 子>
答案 1 :(得分:0)
$sql = mysql_query("SELECT * FROM `table_name`
WHERE sentence LIKE('% ". $input. "%')");
你应该添加空格字符。
答案 2 :(得分:0)
看起来空格字符需要成为WHERE LIKE标准的一部分。你可以把它放在%和web之间。
答案 3 :(得分: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
答案 4 :(得分:0)
Nabheet的回答是正确的,但它错过了字符串的第一个单词以搜索词开头的情况(例如“web”)。此查询解决了以下两种情况:
$sql = mysql_query("SELECT * FROM `table_name` WHERE sentence LIKE "$input%" or sentence LIKE "% $input%" ;");
此查询中的第一个子句将检测句子中的第一个单词何时以搜索词开头,第二个句子将检测何时任何其他单词以搜索词开头。
其他答案正确地指出了清理搜索字词以防止SQL注入的重要性。