2009-10-21 253 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) 

也許這將是有益的,或者也許有人能夠以更好的方式重寫它。