Ответ 1
РЕДАКТИРОВАТЬ: То, что я сказал ниже о необходимости хранения хранимой процедуры, НЕ ИСТИНА. Попробуйте следующее:
SELECT CASE WHEN ( (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000 )
THEN <QUERY A>
ELSE <QUERY B>
END
Это действительно выражение case, и оно отлично работает за пределами хранимой процедуры: -)
Например:
mysql> SELECT CASE WHEN ( 5 > 4 ) THEN ( SELECT 'foo' ) ELSE ( SELECT 'bar' ) END;
+---------------------------------------------------------------------+
| CASE WHEN ( 5 > 4 ) THEN ( SELECT 'foo' ) ELSE ( SELECT 'bar' ) END |
+---------------------------------------------------------------------+
| foo |
+---------------------------------------------------------------------+
1 row in set (0.01 sec)
mysql> SELECT CASE WHEN ( 3 > 4 ) THEN ( SELECT 'foo' ) ELSE ( SELECT 'bar' ) END;
+---------------------------------------------------------------------+
| CASE WHEN ( 3 > 4 ) THEN ( SELECT 'foo' ) ELSE ( SELECT 'bar' ) END |
+---------------------------------------------------------------------+
| bar |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)
Старый ответ ниже для исторического интереса, так как он уже собирает upvotes:
Вы можете использовать приведенное ниже, я думаю, но только внутри хранимой процедуры:
CASE (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000
WHEN 1 THEN <QUERY A>
ELSE <QUERY B>
END CASE
Это оператор CASE
, в отличие от выражения CASE
... https://dev.mysql.com/doc/refman/5.0/en/case.html содержит больше подробностей.
На самом деле, я подозреваю, что в общем случае, если вы хотите выполнить разные запросы условно, вам нужно будет посмотреть на хранимые процедуры - я могу ошибаться, но это мое чувство кишки в этот момент. Если вы можете это сделать, это, вероятно, будет с выражениями CASE!
Последнее редактирование: в любом реальном примере я, вероятно, выполнил бы условный бит в своем приложении и просто передал бы SQL (или ORM, который бы сгенерировал мой SQL), как только я решил, что искать для.