【问题标题】:Mysql AND search on multiple row with multiple keywordsMysql AND 使用多个关键字搜索多行
【发布时间】:2012-09-09 19:36:49
【问题描述】:

假设我有这张桌子:

id    |  field1  |  field2  |  field3  |  field4
 0    |  pear    |  peach   |  fruit   |  california
 1    |  apple   |  peas    |  xxxxxx  |  cupertino
 2    |  apple   |  peach   |  xxxxxx  |  san francisco

如果用户搜索“apple peach”我想得到这条线

2    |  apple   |  peach   |  xxxxxx  |  san francisco

搜索“applepie san francisco”或“applepeach fran”的预期结果相同

那么执行此操作的 mysql 请求是什么?

谢谢

【问题讨论】:

    标签: mysql sql search sql-like


    【解决方案1】:

    您将使用某种参数来适应您的搜索。所以:

    SELECT `id`, `field1`, `field2`, `field3`, `field4`
      FROM Table1
     WHERE whatyouarelookingfor_1 IN (field1, field2, field3) 
       AND whatyouarelookingfor_2 IN (field1, field2, field3)
    

    编辑添加 IN 子句,因为之前它只从一个字段中选择

    这是一个简单的查询,检查它是否有效SQL Fiddle code

    【讨论】:

    • 鉴于问题指出用户搜索“apple peach”,我认为 OP 想要一种更通用的方法。
    • field1 IN (field1, field2, field3) AND field2 IN (field1, field2, field3) 将永远为真。
    • OP 肯定会使用参数...将再次编辑以使其更具可读性
    【解决方案2】:

    试试这个查询

    SELECT * FROM TABLE_NAME WHERE CONCAT(field1, ' ', field2) = 'apple peach';
    

    【讨论】:

    • SELECT * FROM TABLE_NAME WHERE CONCAT(field1, ' ', field2) like '%apple%' and CONCAT(field1, ' ', field2) like '%peach%';是我想要的
    【解决方案3】:
    SELECT 
       * 
    FROM 
       your_table
    WHERE 
       'apple' IN (field1, field2, field3) 
       AND 'peach' IN (field1, field2, field3)
    

    【讨论】:

    • 这似乎是我想要做的,但我不想搜索确切的单词 apple,例如它可以是 applepie,可以吗?
    • @Mathieu 所以如果applepeach 是这个词,你的例子中的所有行都会被选中?
    【解决方案4】:

    很简单,您想检查field1 是否为“apple”而field2 是否为“peach”,所以WHERE field1='apple' AND field2='peach' 会这样做。

    我感觉你想要的有点复杂。一种解决方案可能是将搜索词中的空格替换为逗号,然后使用IN SQL 运算符在其中进行搜索。

    因此可能会出现以下情况:

    SELECT ... FROM ... 
    WHERE 
    field1 IN ('apple','peach') OR 
    field2 IN ('apple','peach') OR 
    field3 IN ('apple','peach') OR  
    field4 IN ('apple','peach')
    

    【讨论】:

    • 或者,交换fieldXapple,peach 的顺序,类似于xdazz 的答案。
    • 这将选择所有行。
    猜你喜欢
    • 2020-07-20
    • 1970-01-01
    • 2019-02-07
    • 2011-09-28
    • 1970-01-01
    • 2011-09-21
    • 2013-04-08
    • 1970-01-01
    相关资源
    最近更新 更多