在多列中搜索

时间:2011-07-24 19:41:51

标签: php mysql search

拥有以下表格架构:

id | english_name | russian_name | year
---------------------------------------
 5 |   The Book   |    Kniga     | 2008

和给定的输入:Kniga 2008;

是否可以重现以下步骤?

  • russian_name搜索EXACT MATCH。如果匹配,则返回行;
  • 如果不匹配,请搜索english_name以获取完整匹配。
  • 如果仍然没有匹配,例如以下情况(输入为Kniga 2008),则尝试查看列并查看是否存在匹配的任何组合列。在此特定情况下,russian_nameyear将匹配。
  • 忽略-/:等字符,因此如果给定的输入为:The Book / Kniga 2008The Book : 2008,则结果仍应包含该行上方。

1 个答案:

答案 0 :(得分:2)

这不漂亮,但是:

SELECT * FROM books WHERE russian_name = ? OR english_name = ? OR CONCAT(russian_name, ' ', year) LIKE ? OR CONCAT(english_name, ' ', year) LIKE ?

其中查询字符串设置为前两个问号,第二个和第三个设置为:

'%' . str_replace ( ' ', '%', $query ) . '%'