【发布时间】:2013-06-16 11:33:08
【问题描述】:
在 MySQL 之外的任何地方都感觉非常简单。
基本上,我需要根据特定术语返回的结果数量来切换我使用的索引类型以及其他一些条件。
大意是:
IF (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000
EXECUTE QUERY A
ELSE
EXECUTE QUERY B
这可能在 MySQL 语句中吗?
编辑:
查询 A:
SELECT id
FROM table_a
FORCE INDEX(id)
JOIN table_b ON table_a.id = table_b.id
WHERE term LIKE "term"
ORDER BY date
LIMIT 100;
查询 B:
SELECT id
FROM table_a
FORCE INDEX(term)
JOIN table_b ON table_a.id = table_b.id
WHERE term LIKE "term"
GROUP BY term # These lines would be included for a few conditions not mentioned above.. but are necessary
HAVING COUNT = 1 # same...
ORDER BY date
LIMIT 100;
查询切换的原因是,根据“术语”的受欢迎程度,我得到的结果时间截然不同。
【问题讨论】:
-
QUERY A和QUERY B具体是什么? SQL 通常允许使用创造性的WHERE子句来处理这种情况,但我们不能说除非我们知道 A 和 B 是否足够相关。 -
...否则,MySQL 只允许在函数、触发器和存储过程中使用流控制逻辑——而不是在常规查询中。
-
理论上 - 是的(借助
CASE语句和连接),但这取决于两个查询中的字段数和记录数是否匹配。您应该将这两个与测试数据一起发布,以便我们回答。 -
@MichaelBerkowski 我将查询添加到问题中。
-
您可以同时执行查询 A 和 B,然后使用 CASE 进行计数。如果这不起作用,请查找存储过程
标签: mysql