0

MYSQL能做下吗?

我的条款 =a b c

我的查询 =SELECT * FROM pages WHERE内容CONTAINS (a AND b AND c)

我需要在一个页面(搜索者)中使用多个术语进行查询。如果我有一个"1a2b3c"必须过滤的单元格,如果其他单元格有"1a2b4d9i",则第二个单元格不能过滤。

另外,如果可能的话,我想按单词过滤。像"1a2b3c" --> "1 a 2 b 3 c", 并且如果它加入的文本不会过滤。

我测试这段代码

$sql = mysql_query("SELECT * FROM pages WHERE "
                      ."(`title` LIKE '%$s%' OR "
                      ."`title` LIKE '%$s' OR "
                      ."`title` LIKE '$s%' OR"
                      ."`content` LIKE '%$s%' OR "
                      ."`content` LIKE '%$s' OR "
                      ."`content` LIKE '$s%') "
                      ."AND `name` != 'inicio' "
                      ."AND `name` != 'contactenos' "
                      ."AND `name` != '404' "
                      ."AND `name` != '403' "
                      ."AND `name` != 'login'");

使用一个值效果很好,但使用 2 个或更多值时它找不到东西。

我也试过(a,b,c)and a|b|cwith AGAINST, REGEXand other 但我无法让它工作。


编辑 1:如果我搜索“foo bar”并且我的 php 代码将其转换为数组,我该如何在 MYSQL 上编写?如果我搜索"foo bar"并且我的文本"the foo bar is awesome"和其他文本"the foo is worst"只打印第一个,我需要。

4

1 回答 1

0

您可以使您的查询更短。你可以使用这样的东西

$sql = mysql_query("SELECT * FROM pages WHERE "
                      ."`title` LIKE '%".$s."%' OR "
                      ."`content` LIKE '%".$s."%' OR "
                      ."AND `name` != 'inicio' "
                      ."AND `name` != 'contactenos' "
                      ."AND `name` != '404' "
                      ."AND `name` != '403' "
                      ."AND `name` != 'login'");

您可以使用 GROUP BY 来防止结果相乘:

$sql = mysql_query("SELECT * FROM pages WHERE "
                      ."`title` LIKE '%".$s."%' OR "
                      ."`content` LIKE '%".$s."%' OR "
                      ."AND `name` != 'inicio' "
                      ."AND `name` != 'contactenos' "
                      ."AND `name` != '404' "
                      ."AND `name` != '403' "
                      ."AND `name` != 'login'") GROUP BY title,content;

为了更好的概述:

$sql = mysql_query("SELECT * FROM pages WHERE "
                  ."`title` LIKE '%".$s."%' OR "
                  ."`content` LIKE '%".$s."%' OR "
                  ."AND `name` NOT IN('inicio','contactenos','404','403','login') GROUP BY title,content;

但请在查询中使用之前清理您的变量;)

于 2013-10-27T21:31:29.347 回答