MYSQL在同一个单元格中按多个值过滤?

时间:2013-10-27 20:58:33

标签: php mysql search cell

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'");

如果一个值效果很好,但是有两个或更多值,则无法找到某些值。

我还尝试了(a,b,c)a|b|cAGAINSTREGEX等,但我无法使其有效。


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

1 个答案:

答案 0 :(得分: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;

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