MySQL условный оператор SELECT - PullRequest
       17

MySQL условный оператор SELECT

1 голос
/ 21 октября 2009

Если есть записи, у которых есть поле, содержащее «X», верните их, иначе верните случайную запись.

Как, черт возьми, ты это делаешь?

Ответы [ 3 ]

1 голос
/ 21 октября 2009

Лучше всего это сделать с 2 запросами Первый возвращает записи, где field='x'. Если это пусто, тогда сделайте запрос для случайной записи с field!='x'. Получение случайной записи может быть очень неэффективным, как вы увидите по количеству вопросов «получить случайную запись» в SO. Из-за этого вы действительно хотите сделать это, только если это абсолютно необходимо.

0 голосов
/ 21 октября 2009

Хорошо, вот мой пример, основанный на таблице 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)

Может быть, это будет полезно, или, может быть, кто-то сможет переписать это лучше.

0 голосов
/ 21 октября 2009

Просто бит для выбора случайной записи будет очень трудным и крайне неэффективным для больших таблиц в mysql, на этом веб-сайте вы можете найти один скрипт для этого, добавление вашего условия должно быть тривиальным для 'x' и получите необходимую вам функциональность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...