簡體   English   中英

為什么我的MySQL MATCH()AGAINST()查詢因LEFT JOIN數據庫中的列而失敗?

[英]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.namedescriptions.overviewdescriptions.specs 如果我以完整的table.column格式指定它們,則不會更改行為。

但是,如果我輸了products.nameMATCH()我收到以下錯誤:

#1191 - Can't find FULLTEXT index matching the column list

但是, descriptions.overviewdescriptions.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM