我有有列一個表調用對象:爲每個對象SQL搜索結果排名
object_id,
name_english(vchar),
name_japanese(vchar),
name_french(vchar),
object_description
。
當用戶進行搜索時,他們可能進入任一英語,日語或法語...和我的SQL語句是:
SELECT
o.object_id,
o.name_english,
o.name_japanese,
o.name_french,
o.object_description
FROM
objects AS o
WHERE
o.name_english LIKE CONCAT('%',:search,'%') OR
o.name_japanese LIKE CONCAT('%',:search,'%') OR
o.name_french LIKE CONCAT('%',:search,'%')
ORDER BY
o.name_english, o.name_japanese, o.name_french ASC
而且一些條目是這樣的:
Tin spoon,
Tin Foil,
Doctor Martin Shoes,
Martini glass,
Cutting board,
Ting Soda.
因此,當用戶搜索單詞「Tin」時,它將返回所有這些結果,但我只想返回包含術語「Tin」的結果或顯示結果,並按相關性順序對它們排序。我怎樣才能做到這一點?
謝謝。
謝謝,但由於我是新手,請介意我的天真問題。由於我只是比較/搜索對象的名稱,有些人告訴我沒有必要使用FULLTEXT,除非它是一段文字,我不確定。並將錶轉換爲MYISAM/FULLTEXT影響性能/速度?我讀過很多文章,但沒有一篇真正解釋我的案例。感謝你的寶貴時間。 – 2011-03-31 07:16:39
FULLTEXT是一種索引類型。索引是一種加速數據訪問(搜索)的數據結構。特定索引類型FULLTEXT使您能夠根據完整(非部分)字快速訪問各種VARCHAR,CHAR或TEXT字段。這完全匹配你的問題陳述。嘗試一下並對其進行基準測試。將表從InnoDB轉換爲MyISAM具有性能和大小的影響,特別是如果你有很多併發寫入。同時也是基準。您可能希望以1:1的關係將可搜索列設置爲單獨的表格。 – Isotopp 2011-03-31 09:31:28
感謝您的解釋...並且由於表格只會每週更新/有寫操作,因此我認爲這種影響應該是最小的=)我將前往嘗試。再次感謝 – 2011-03-31 09:53:37