2017-08-04 62 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)