MODIFICA: Ciò che ho detto di seguito sulla richiesta di una stored procedure NON è VERO. Prova questo:
SELECT CASE WHEN ( (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000 )
THEN <QUERY A>
ELSE <QUERY B>
END
Questa è, in effetti, un'espressione case e funziona bene al di fuori di un processo memorizzato :-)
Ad esempio:
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)
Vecchia risposta di seguito per interesse storico, poiché raccoglie già voti positivi:
È possibile utilizzare quanto segue, credo, ma solo all'interno di una procedura memorizzata:
CASE (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000
WHEN 1 THEN <QUERY A>
ELSE <QUERY B>
END CASE
Questo è un CASE
istruzione, a differenza di un CASE
espressione... https://dev.mysql.com/doc /refman/5.0/en/case.html
ha più dettagli cruenti.
In realtà, sospetto in generale che se si desidera eseguire query diverse in modo condizionale, sarà necessario guardare alle procedure archiviate:potrei sbagliarmi, ma a questo punto è il mio istinto. Se puoi farlo, probabilmente sarà con le espressioni CASE!
Un'ultima modifica:in qualsiasi esempio del mondo reale, probabilmente farei il bit condizionale nella mia applicazione e passerei semplicemente a SQL (o a un ORM che genererebbe il mio SQL) una volta deciso cosa cercare.