EDITAR: O que eu disse abaixo sobre exigir um procedimento armazenado NÃO É VERDADEIRO. Tente isto:
SELECT CASE WHEN ( (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000 )
THEN <QUERY A>
ELSE <QUERY B>
END
Esta é, de fato, uma expressão case e funciona bem fora de um proc armazenado :-)
Por exemplo:
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)
Resposta antiga abaixo por interesse histórico, pois já reúne votos positivos:
Você pode usar o abaixo eu acho, mas apenas dentro de um procedimento armazenado:
CASE (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000
WHEN 1 THEN <QUERY A>
ELSE <QUERY B>
END CASE
Este é um
CASE
declaração, diferente de um CASE
expressão... https://dev.mysql.com/doc /refman/5.0/en/case.html
tem mais detalhes sangrentos. Na verdade, suspeito que, em geral, se você deseja executar consultas diferentes condicionalmente, precisará procurar procedimentos armazenados - posso estar errado, mas esse é o meu pressentimento neste momento. Se você puder fazer isso, provavelmente será com expressões CASE!
Uma última edição:em qualquer exemplo do mundo real, eu provavelmente faria o bit condicional no meu aplicativo e apenas entregaria ao SQL (ou a um ORM que geraria meu SQL) assim que decidisse o que procurar.