如何在mysql中选择与其他随机结果匹配的结果
我希望选择数据库表中的所有匹配结果,其中也包含随机结果,但匹配结果位于顶部。顺便说一下,我现在使用两个查询,第一个是匹配查询,如果计数为零,我现在选择随机结果。我只想用一个查询就可以做到这一点。您可以尝试使用UNION ALL查询,如下所示如何在mysql中选择与其他随机结果匹配的结果,mysql,sql,Mysql,Sql,我希望选择数据库表中的所有匹配结果,其中也包含随机结果,但匹配结果位于顶部。顺便说一下,我现在使用两个查询,第一个是匹配查询,如果计数为零,我现在选择随机结果。我只想用一个查询就可以做到这一点。您可以尝试使用UNION ALL查询,如下所示 select product_name,price from marketing_table where price >=5000 /*user supplied filter*/ and price <=10000 /*user s
select product_name,price
from marketing_table
where price >=5000 /*user supplied filter*/
and price <=10000 /*user supplied filter*/
union all
select m.product_name,m.price
from marketing_table m
where not exists (select *
from marketing_table m1
where m1.price >=5000 /*user supplied filter*/
and m1.price <=10000 /*user supplied filter*/
)
我从您的评论中了解到,您可以先尝试以下简单方式:
SET @product := 'purse'; -- search term
SELECT * FROM product
ORDER BY product_name LIKE CONCAT('%',@product,'%') DESC, price ASC;
这是我能想到的最简单的方法,它可以作为你的起点
下面是一个演示:
如果这不是您想要的,您必须输入并插入一些具有预期输出的示例数据。您当前的问题往往被标记为过于宽泛,需要重点/清晰。您是否尝试使用带限制的联合子查询
SELECT *
FROM (
SELECT 0 priority, t.*
FROM first_table t
UNION ALL
SELECT 1 priority, t.*
FROM second_table t
)
ORDER BY priority
LIMIT 20
如果不希望在第一个\u表返回时包含任何第二个\u表记录,则需要对第二个查询执行子查询以确认不存在任何行
SELECT *
FROM (
SELECT 0 priority, t.*
FROM first_table t
UNION ALL
SELECT 1 priority, t.*
FROM second_table t
LEFT JOIN (SELECT ... FROM first_table) a
WHERE a.id IS NULL
)
ORDER BY priority
LIMIT 20
我认为,如果您使用的是MySQL 8中的Common Table Expressions CTE功能,那么就有可能使用该版本
你能举个例子吗?或者可以显示您的模式?我正在使用“最小”和“最大价格”等过滤器进行搜索,因此,如果没有与筛选器匹配的记录,我不希望搜索返回空结果,而是返回随机结果;如果没有几条记录与搜索筛选器匹配,则返回少数记录,其中随机记录位于顶部,但匹配记录位于顶部。您只需与您的将条件第二个查询与随机查询进行匹配。这样,您不需要编写两个查询,而是将其合并为一个查询。您不需要全部联合,只需在where子句中使用OR即可。也就是说,MySQL中的optimize在您的版本中可能会做得更好,因为我希望两个表同时返回结果,否则将不是理想的解决方案。