使用AND和OR搜索Mysql

时间:2011-12-12 15:22:15

标签: php mysql sql

我用于在数据库中搜索类似的查询:

SELECT * , MATCH (field1, field2) AGAINST ('".$keyword."') AS score FROM table_name WHERE MATCH (field1, field2) AGAINST etc...

但是当用户在搜索框中写入多个单词时,它会给出所有结果,即第一个单词或第二个单词。

基本上,我想做的是让人们像这样搜索:

(keyword1 OR keyword2) AND keyword3和类似的。因此,它会找到keyword1keyword3keyword2keyword3

我该怎么做?

3 个答案:

答案 0 :(得分:0)

您可以解析字符串并运行2个不同的查询或加入您的查询。

SELECT * FROM table_name WHERE MATCH(keyword1 AND keyword3)

SELECT * FROM table_name WHERE MATCH(keyword2 AND keyword3)

或者你可以写一些加入这些结果的东西。

我真的希望这有帮助...

答案 1 :(得分:0)

假设你的桌面上已经有一个全文搜索索引,你可以指示匹配应该以布尔模式运行(你应该问一下。仔细检查mysql文档中的语法)。

SELECT * FROM table_name WHERE MATCH('+keyword1 +keyword2 keyword3' IN BOOLEAN MODE) 

前缀为“+”符号的关键字是强制性的(即返回的记录必须包含两者),OR模式下没有“+”匹配的关键字,因此上述查询等同于(keyword1&& keyword2)|| KEYWORD3

答案 2 :(得分:0)

http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html

添加了几个运算符来加权结果,如:

  • 需要某些关键字(+必须在结果中)
  • 排除关键字( - 不能在结果中)
  • 负值(〜可以是结果,但会用这个词降低结果)
  • 赞成一个词而不是另一个词(< and>)
  • 分组(括号)
  • 通配符(*)
  • 文字字符串(“引用字符串”完全匹配,而不是单独匹配每个字)