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|c
与AGAINST
,REGEX
等,但我无法使其有效。
编辑1:
如果我搜索“foo bar”并将我的php代码转换为数组,我该如何在MYSQL上编写?如果我搜索"foo bar"
,我的文字为"the foo bar is awesome"
,其他文字为"the foo is worst"
,则只需打印第一张。
答案 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;
但请在查询中使用之前清理变量;)