【问题标题】:MYSQL filter by multiple values in same cell?MYSQL按同一单元格中的多个值过滤?
【发布时间】:2013-10-31 08:17:03
【问题描述】:

MYSQL可以做下吗?

我的条款 = a b c

我的查询 = SELECT * FROM pages WHEREcontentCONTAINS (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)a|b|cAGAINSTREGEX 和其他,但我无法使其工作。


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

【问题讨论】:

    标签: php mysql search cell


    【解决方案1】:

    您可以缩短查询时间。 你可以使用这样的东西

    $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;
    

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

    【讨论】:

    • 感谢您的回答并删除代码。但问题是一样的。如果我搜索“foo bar”并且我的 php 代码将其转换为数组,我该如何在 MYSQL 上编写?我需要如果我搜索“foo bar”并且我的文本是“foo bar is awesome”而其他文本是“foo is差”只打印第一个。
    猜你喜欢
    • 1970-01-01
    • 2017-06-16
    • 2019-11-05
    • 2017-01-25
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多