Select mysql选择:如果不满足最大行数,则使用其他条件随机选择

Select mysql选择:如果不满足最大行数,则使用其他条件随机选择,select,where-clause,Select,Where Clause,我需要从一个表中随机选择20个限制条件。我也用了同样的方法 SELECT *, rand() FROM table WHERE column1 LIKE '%text%' ORDER BY rand() LIMIT 20 但有时标准无法满足,只能选择不到20行。在这种情况下,我需要添加另一个select语句,其中将有另一个条件,不等于前面的选择,我是说DISTINCT 我如何通过单一查询(如条件查询)实现这一点 mytable定义为 CREATE TABLE IF NOT EXISTS `my

我需要从一个表中随机选择20个限制条件。我也用了同样的方法

SELECT *, rand() FROM table WHERE column1 LIKE '%text%' ORDER BY rand() LIMIT 20
但有时标准无法满足,只能选择不到20行。在这种情况下,我需要添加另一个select语句,其中将有另一个条件,不等于前面的选择,我是说DISTINCT 我如何通过单一查询(如条件查询)实现这一点

mytable定义为

CREATE TABLE IF NOT EXISTS `mytable`(
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`house` varchar(100) NOT NULL,
`place` varchar(100) NOT NULL,
PRIMARY KEY (`VinRav_ExamZ_id`) );
表格内容

id------name-------house------place--
1-------data1------data2------data3--
2-------data4------data5------data6--
3-------data7------data8------data6--
4-------data9------data9------data10--
5-------data11-----data8------data12--
然后首先查询

SELECT *, rand() FROM mytable WHERE palce LIKE 'data6' ORDER BY rand() LIMIT 20
这将给出2行<20

2-------data4------data5------data6--
3-------data7------data8------data6--
在这种情况下,执行

哪个会回来

3-------data7------data8------data6--
5-------data11-----data8------data12--
那么作为一个组合,我需要

2-------data4------data5------data6--
3-------data7------data8------data6--
5-------data11-----data8------data12--

提前感谢

请向我们展示您的表结构,并给出一些解释,您的表中存储了什么样的数据?您可以按第1列中的相同顺序、兰德顺序来链接订单。然后,它将首先按第1列在该块内随机排序。如果此块的条目少于20个,则将使用column1的下一个值的下一个块。很抱歉,太傻了。。。我现在不明白了…你能解释一下你代码中的1,2,3,4吗…我需要用select语句替换它们吗?不,你唯一需要替换的是搜索到的“%text%”。数字1、2、3、4是所选记录的优先级。如果删除限制20,则表中将包含所有记录。如果你像你的问题所说的那样保持限制20,你将有20条记录表明这是第一个条件。如果少于20条,则用第二条标准填写20条,如果仍有20条未填写,则使用第三条标准中的记录,最后,如果用这三条标准无法填写20条记录,则从表中给出任何记录。在每个条件中,所有条件都是随机选择的,只需使用带有真实字符串的真实表进行尝试即可
SELECT *
FROM table 
-- WHERE column1 LIKE '%text%'  -- (notice removed where)
ORDER BY 
    case when  column1 like '%text%'           then 1 
         when  column1 like '%secondCriteria%' then 2
         when  column1 like '%thirdCriteria%'  then 3
         else 4
    end, 
    rand() 
LIMIT 20
SELECT *
FROM table 
-- WHERE column1 LIKE '%text%'  -- (notice removed where)
ORDER BY 
    case when  column1 like '%text%'           then 1 
         when  column1 like '%secondCriteria%' then 2
         when  column1 like '%thirdCriteria%'  then 3
         else 4
    end, 
    rand() 
LIMIT 20