2016-03-28 9 views
2

MySQLフルテキスト検索アプリケーションを準備中です。Mysql Full Text Search Left Join With Another Table

私は2つのテーブル: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

他のテーブルと一緒にJOINしてください – Mihai

答えて

1

ただ、書籍に価格表を結合する最低価格を取得し、group by句を追加します。

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

ありがとうございました。 –