簡體   English   中英

MySQL可選LEFT JOIN與MATCH

[英]MySQL Optional LEFT JOIN With MATCH

我有以下查詢,它對MySQL Innodb數據庫中相同搜索項的兩個不同表中的兩列執行全文搜索;

SELECT Id, 
MATCH (tb1.comment, tb2.comment) AGAINST (+'search term' IN BOOLEAN MODE) AS Relevance
FROM tbl1
LEFT JOIN tb2 ON tb1.Id = tb2.Id
WHERE MATCH (tb1.comment, tb2.comment) AGAINST (+'search term' IN BOOLEAN MODE) 
HAVING Relevance > 0 

如果我只在tb1.com上執行MATCH它工作正常,我會找回相關的搜索條件,但我想對兩個列執行它。

但是因為另一個表是LEFT JOIN的可選項,如果沒有匹配的ID,它不會返回任何內容。 關於如何克服這個問題的任何想法?

我設法弄清楚以下的工作似乎表現良好,並給出我想要的結果;

    SELECT Id, 
    MATCH (tb1.comment) AGAINST (+'search term' IN BOOLEAN MODE) AS Relevance1,
    MATCH (tb2.comment) AGAINST (+'search term' IN BOOLEAN MODE) AS Relevance2
    FROM tbl1
    LEFT JOIN tb2 ON tb1.Id = tb2.Id
    WHERE (MATCH (tb1.comment) AGAINST (+'search term' IN BOOLEAN MODE) 
    OR MATCH ( tb2.comment) AGAINST (+'search term' IN BOOLEAN MODE))
    HAVING (Relevance1+Relevance2) > 0 
    ORDER BY (Relevance1+Relevance2) DESC

您無法匹配不在同一FULLTEXT索引中的多個列。 來自http://dev.mysql.com/doc/refman/5.6/en/fulltext-restrictions.html

MATCH()列列表必須與表的某些FULLTEXT索引定義中的列列表完全匹配,除非此MATCH()在MyISAM表上是IN BOOLEAN MODE。 對於MyISAM表,布爾模式搜索可以在非索引列上完成,盡管它們可能很慢。

在你的特定情況下,你沒有一個完全由(tb1.comment, tb2.comment)組成的索引 - 你可以 - 所以這場比賽不可能成功。

要使其工作,請創建一個鏈接到包含兩個comment字段的表的第三個表,並將兩個列編入索引,並在適當的JOIN執行匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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