[英]Why does my MySQL MATCH() AGAINST() query fail with columns from LEFT JOIN'd databases?
我有一個類似於以下內容的MySQL查詢:
SELECT *
FROM products
LEFT JOIN descriptions ON products.DescriptionID = descriptions.ID
WHERE MATCH (name, overview, specs) AGAINST ('ram');
我試圖使用MATCH() AGAINST()
搜索的所有列都是FULLTEXT,但是在phpMyAdmin中進行測試時出現以下錯誤:
#1210 - Incorrect arguments to MATCH
如果我只MATCH
一列,則不會出錯並且可以正常工作,但是,當我嘗試MATCH
多列時,它會因該錯誤而失敗。 我正在運行MySQL 5.0.45,而MySQL 5.0全文搜索功能文檔暗示我可以做到這一點。
是因為有LEFT JOIN
嗎? 我是否需要對一堆MATCH() AGAINST()
函數進行OR
?
@Zak更新:我無法發布表創建語句,但是我可以說在此示例中,列如下: products.name
, descriptions.overview
, descriptions.specs
。 如果我以完整的table.column
格式指定它們,則不會更改行為。
但是,如果我輸了products.name
從MATCH()
我收到以下錯誤:
#1191 - Can't find FULLTEXT index matching the column list
但是, descriptions.overview
和descriptions.specs
均為FULLTEXT。
MATCH()
的參數必須與FULLTEXT索引定義中的列相同。 它們的數量和位置必須相同。
同樣,由於您無法使用來自不同表的多個列創建索引,因此無法在單個MATCH()
調用中與來自不同表的列進行MATCH()
。
如果要搜索不同表中的文本列,則必須在每個表中創建FULLTEXT索引,然后使用單獨的MATCH()
調用搜索每個索引。 使用OR
表達式合並結果。
我遇到了同樣的問題。 事實是,您無法匹配不同表中的列,因此必須拆分查詢。
嘗試這樣的事情(編輯以匹配列和表):
SELECT p.name, d.overview, d.specs
FROM products AS p
LEFT JOIN descriptions AS d ON p.DescriptionID = d.ID
WHERE MATCH (p.name) AGAINST ('ram')
OR MATCH (d.overview, d.specs) AGAINST ('ram');
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.