如何在MySQL表中查找特定单词?

时间:2015-01-13 06:46:43

标签: php mysql

我想在MySQL表中找到特定的关键字....

主要代码是:

if ($_REQUEST["keyword"]<>'') {
$search_string = "AND trainer like '".mysql_real_escape_string($_REQUEST["keyword"])."%' 
OR venue like '".mysql_real_escape_string($_REQUEST["keyword"])."%' 
OR session like '".mysql_real_escape_string($_REQUEST["keyword"])."%' 
OR course like '".mysql_real_escape_string($_REQUEST["keyword"])."%' 
OR category like '".mysql_real_escape_string($_REQUEST["keyword"])."%'";    
} 
else {
$sql = "SELECT * FROM ".$SETTINGS["data_table"]." 
WHERE id>0".$search_string;
}

问题是上面的代码显示搜索到的所有单词的结果相同。任何参考帮助都将非常感谢。

2 个答案:

答案 0 :(得分:0)

假设您的问题是您的结果不正确,可以使用以下方法解决此问题:

$search_string = " AND (trainer like '%".mysql_real_escape_string($_REQUEST["keyword"])."%' 
    OR venue like '%".mysql_real_escape_string($_REQUEST["keyword"])."%' 
    OR session like '%".mysql_real_escape_string($_REQUEST["keyword"])."%' 
    OR course like '%".mysql_real_escape_string($_REQUEST["keyword"])."%' 
    OR category like '%".mysql_real_escape_string($_REQUEST["keyword"])."%')";    

所做的更改:

  1. 围绕您的OR语句
  2. 添加了括号
  3. 将通配符添加到搜索字符串以及现有的附加通配符
  4. AND之前添加了空格,因此您生成的查询最终不会包含id>0AND
  5. 修改

    我认为通过解释出现问题我可以提供更多帮助。假设有人搜索“foo”。并且您的表格被称为&#39; bar&#39;,您的代码将生成以下查询:

    SELECT
    *
    FROM
    bar
    WHERE
    id>0AND
    trainer like 'foo%'
    OR venue like 'foo%'
    OR session like 'foo%'
    OR course like 'foo%'
    OR category like 'foo%'
    

    这里有几个问题:

    1. 您错误地合并了部分,因此AND会在{id> 0&#39;旁边出现,AND之前的空格会解决该问题。
    2. 您尚未将括号中的OR个句子包裹起来,因此您最终会得到一个查询,要求满足任何条件(包括id > 0 本身
    3. 您没有在搜索字符串中添加通配符,这意味着您只能找到&#39; foo&#39;开头的记录,而不是包含&#39; foo&#39;在其他地方。
    4. 上述建议的更改将解决这些问题。

答案 1 :(得分:0)

对于完整的特定单词,您需要的意思是您必须在单词

之前和之后使用双 %%
  if ($_REQUEST["keyword"]<>'') {
    $search_string = "AND trainer like '%".mysql_real_escape_string($_REQUEST["keyword"])."%'  
OR venue like '%".mysql_real_escape_string($_REQUEST["keyword"])."%' 
OR session like '%".mysql_real_escape_string($_REQUEST["keyword"])."%' 
OR course like '%".mysql_real_escape_string($_REQUEST["keyword"])."%' 
OR category like '%".mysql_real_escape_string($_REQUEST["keyword"])."%'";    
} 
else {
$sql = "SELECT * FROM ".$SETTINGS["data_table"]." 
WHERE id>0".$search_string;

}