2016-03-28 52 views
2

我正在準備MySQL全文搜索應用程序。Mysql全文搜索左連接另一個表

我有兩個表:BooksPrice。當搜索執行時,我需要從兩個表中獲取數據。

Books模式:

id,name,title,active 
1,Alex, Alex Bio,1 
2,Bob, Bob Bio, 1 

mysql fulltext index(name,title) 

Price模式:

id,product_id,price 
1,1,500 
2,1,600 
3,1,700 
4,2,300 
5,2,400 
6,2,500 

當我運行下面的查詢,搜索工作正常,但我需要price;並且只有最低的price應與product_id一起顯示。

以下是我的全部查詢:

SELECT *, 
    MATCH (name, title) 
    AGAINST ('" . $search . "' IN BOOLEAN MODE) AS "high" 
    FROM books 
    WHERE MATCH (name, title) AGAINST ('" . $search . "' IN BOOLEAN MODE) 
    AND active = 1 
    ORDER BY high DESC; 

預期輸出:

id,name,title,price 
1,Alex,Alex Bio,500 
2,Bod,Bob Bio,300 
+0

向我們展示您的預期輸出。 –

+0

只要做一個加入其他表 – Mihai

回答

1

價格表剛剛加入書,拿到最低的價格和條款添加組:

SELECT books.id, name, title, min(p.price) 
FROM books 
INNER JOIN price p on p.product_id=books.id 
WHERE MATCH (name,title) AGAINST ('" . $search . "' IN BOOLEAN MODE) AND active = 1 
GROUP BY books.id, name, title 
ORDER BY MATCH (name,title) AGAINST ('" . $search . "' IN BOOLEAN MODE) DESC 
+0

謝謝代碼工作 –

1

您需要加入才能完成這項工作:

SELECT t1.id, t1.name, t1.title, COALESCE(t2.minPrice, 'NA') AS price 
FROM books t1 
LEFT JOIN 
(
    SELECT product_id, MIN(price) AS minPrice 
    FROM price 
    GROUP BY product_id 
) t2 
    ON t1.id = t2.product_id 
WHERE MATCH (name,title) AGAINST ('" . $search . "' IN BOOLEAN MODE) AND active = 1 
ORDER BY MATCH (name,title) AGAINST ('" . $search . "' IN BOOLEAN MODE) DESC 
+0

感謝您的幫助。 –