РЕДАКТИРАНЕ: Това, което казах по-долу относно изискването на съхранена процедура, НЕ Е ВЯРНО. Опитайте това:
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)
Стар отговор по-долу за исторически интерес, тъй като вече събира гласове за:
Според мен можете да използвате следното, но само в съхранена процедура:
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), след като реша какво да търся.