mysql select:如果不满足max,则随机选择另一个条件。行数

时间:2014-10-30 11:39:55

标签: select where-clause

我需要从某个条件下的表中选择LIMIT为20的随机值。我使用了以下相同的

SELECT *, rand() FROM table WHERE column1 LIKE '%text%' ORDER BY rand() LIMIT 20

但有时标准不会满足,只选择少于20行。在这种情况下,我需要添加另一个select语句,其中将有另一个标准,并且不等于之前的Selection(我的意思是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--
在这种情况下

执行

SELECT *, rand() FROM mytable WHERE house LIKE 'data8' ORDER BY rand() LIMIT 20

将返回

3-------data7------data8------data6--
5-------data11-----data8------data12--

然后作为一个组合我需要得到

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

提前谢谢

1 个答案:

答案 0 :(得分:0)

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