2016-03-28 25 views
2

Bir MySQL tam metin arama uygulaması hazırlıyorum.Mysql Fulltext Soldaki Arama Bir Başka Masaya Katıl

İki tablom var: Books ve Price. Arama gerçekleştirirken her iki tablodan veri almam gerekiyor.

Books şema:

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

mysql fulltext index(name,title) 

Price şema: Ben aşağıdaki sorguyu çalıştırdığınızda

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

, arama çalışıyor ama price gerek; ve sadece en düşük price, product_id ile birlikte görüntülenmelidir.

aşağıdaki benim tam sorgu geçerli:

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; 

Beklenen Çıktı:

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

Bize beklenen çıktıyı gösterin. –

+0

Sadece diğer masa ile bir JOIN yapın – Mihai

cevap

1

Sadece kitaplara fiyat tablosunu katılmak minimum fiyat almak ve fıkra ile grup eklemek:

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

Teşekkür ederiz Kod Çalışması –

1

Bu işi yapmak için bir birleştirmeye ihtiyacınız var:

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

Yardımlarınız için teşekkürler. –

İlgili konular