2011-07-24 133 views
1

具有以下表模式:搜索多列

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

和給定的輸入:Kniga 2008;

是否可以重現以下步驟?

  • 搜索russian_name用於確切匹配。如果匹配,則返回該行;
  • 如果不匹配,請搜索english_name進行精確匹配。
  • 如果仍然沒有匹配,如下面的情況(輸入是Kniga 2008),則嘗試在列之間查找並查看是否存在任何匹配列的組合。在這種特殊情況下,russian_nameyear將匹配。
  • 忽略類似的字符-/:因此,如果給定的輸入是:The Book/Kniga 2008或是The Book : 2008,結果應該仍然包含上面行。

回答

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) . '%'