2009-10-21 122 views
1

如果存在包含“X”字段的记录,则返回它们,否则返回一个随机记录。MySQL条件SELECT语句

你是怎么做到的?

回答

1

最好用2个查询完成。首先返回field='x'的记录。如果这是空的,那么用field!='x'做一个随机记录查询。获取随机记录效率可能非常低,因为您会从SO上的“获取随机记录”问题的数量中看到。正因为如此,如果你绝对需要,你真的只想做。

0

只需要选择一个随机记录在mysql中的大表上就会非常困难,而且效率非常高,在website中你可以找到一个脚本来完成这个任务,为'x'添加条件应该是微不足道的,获得你需要的功能。

0

嗯,这里是基于mysql.users表我的例子:

首先,不存在的记录:

mysql> SELECT * FROM (select user, 1 as q from user where user like '%z' union all (select user, 0 from user limit 1)) b WHERE q=(SELECT CASE WHEN EXISTS(select user, 1 as q from user where user like '%z') THEN 1 ELSE 0 END); 

+--------+---+ 
| user | q | 
+--------+---+ 
| drupal | 0 | 
+--------+---+ 

1 row in set (0.00 sec) 

然后,现有:

mysql> SELECT * FROM (select user, 1 as q from user where user like '%t' union all (select user, 0 from user limit 1)) b WHERE q=(SELECT CASE WHEN EXISTS(select user, 1 as q from user where user like '%t') THEN 1 ELSE 0 END); 

+------------------+---+ 
| user    | q | 
+------------------+---+ 
| root    | 1 | 
| root    | 1 | 
| debian-sys-maint | 1 | 
| root    | 1 | 
+------------------+---+ 

4 rows in set (0.00 sec) 

也许这将是有益的,或者也许有人能够以更好的方式重写它。