2017-08-04 61 views
0

我有一個產品表。使用3個不同的查詢來執行搜索以獲得大多數匹配結果。但是我得到了很少的失敗者,例如分頁,因此需要將我的3個查詢合併爲一個,並且仍然給出相同的結果。結合Mysql子查詢

這裏是我的查詢和人員對每個做

查詢1說明:此查詢獲取精確匹配搜索字符串

SELECT *, 
     MATCH (product_name) AGAINST ('k' IN BOOLEAN MODE) as distance, 
     MATCH (product_description) AGAINST ('k' IN BOOLEAN MODE) as distance2 
FROM products 
INNER JOIN shops ON shops.shop_id = products.shop_id 
WHERE MATCH (product_name) AGAINST ('k') 
    OR MATCH (product_description) AGAINST ('k') 
ORDER BY distance DESC, distance2 DESC 
LIMIT 0, 9; 

問題2:這個查詢得到的所有結果,其中搜索字符串是字符串的一部分減去查詢結果然後將結果添加到數組

​​

問題3:此查詢獲取最匹配的查詢1和查詢2的搜索字符串減去結果增加了結果陣列

SELECT *, 
     fuzzy_substring('k', product_name) as distance, 
     fuzzy_substring('k', product_description) as distance2 
FROM products 
INNER JOIN shops ON shops.shop_id = products.shop_id 
WHERE (fuzzy_substring('k', product_name) < 3 
    OR fuzzy_substring('k', product_description) < 3) 
    AND product_id NOT IN ('pr933j4', 'Posr49il', 'p4021dd') 
order by distance ASC, distance2 ASC 
LIMIT 0, 9; 

我無法弄清楚如何將這個三個查詢任何建議,結合一個正確的方向是高度讚賞。 注「K」是字符串被搜索

+0

提示:'UNION'或'JOIN'我看不出這裏有什麼問題 –

+0

顯示美國DB模式,樣品數據和預期產出。 \t請閱讀[**如何提問**](http://stackoverflow.com/help/how-to-ask) \t \t這裏是一個偉大的地方[** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)來了解如何提高您的問題質量並獲得更好的答案。 \t [**如何創建一個最小,完整和可驗證的示例**](http://stackoverflow.com/help/mcve) –

+0

@JuanCarlosOropeza實際上是在嘗試UNION。如何加入工作? – dannjoroge

回答

1

UNION工作對我來說

SELECT * FROM 
((SELECT j1.* FROM products AS j1 LEFT JOIN shops AS z1 ON z1.shop_id = 
    j1.shop_id WHERE MATCH (product_name) AGAINST ('k') OR MATCH 
    (product_description) AGAINST ('k') ORDER BY MATCH (product_name) 
    AGAINST ('k' IN BOOLEAN MODE) DESC, MATCH (product_description) AGAINST 
    ('k' IN BOOLEAN MODE) DESC) s1) 

UNION 

SELECT * FROM 
((SELECT j2.* FROM products AS j2 LEFT JOIN shops AS z2 ON 
    z2.shop_id = j2.shop_id WHERE product_name LIKE '%k%' ORDER BY 
    INSTR(product_name,'k'), product_name) s2) 

UNION 

SELECT * FROM 
((SELECT j3.* FROM products as j3 LEFT JOIN shops as z3 ON z3.shop_id = 
    j3.shop_id WHERE (fuzzy_substring('k', product_name) < 3 OR 
    fuzzy_substring('k', product_description) < 3) AND product_id NOT IN 
    ('pr933j4', 'Posr49il', 'p4021dd') order by fuzzy_substring('k', 
    product_name) ASC, fuzzy_substring('k', product_description) ASC) 
    s3)