2010-06-13 59 views
2

我有一个场景,我正在计算我的SQL的WHERE子句中的某些内容,但我也想要计算 - 因为它很昂贵。是否有可能得到的东西WHERE从句中做的结果,是这样的:是否可以从WHERE子句捕获数据?

SELECT `foo` FROM `table` WHERE (foo = LongCalculation(`column`)) 

一厢情愿,或与MySQL可能吗?

编辑:计算是依赖列

+0

如果你已经有1000行,LongCalculation将运行1000个不同的输入,然后没有解决方案。但是如果不同值的数量远远小于1000,那么你可以使用LongCalculation中的中间缓存存储,这当然必须是一个存储过程。不知道是否可以在存储过程调用之间保留变量值。 – cherouvim 2010-06-13 07:54:48

+0

您可能可以使用临时表来存储特定输入的计算输出。 – cherouvim 2010-06-13 07:56:02

+0

查看我的答案,我是如何解决这个问题的。我没有试图避免计算每一行,每行只有一次以上。 – 2010-06-13 08:09:50

回答

0

返工@ cherouvim的想法的一点,我得到了它与行相关的函数工作:

set @bar = 0; 

SELECT 
    `product_name`, 
    @bar AS `stock` 
FROM `jos_vm_product` 
WHERE (@bar := `product_in_stock`) > 0 
3
set @bar = LongCalculation(); 
select foo from table where [email protected]; 
+0

+1:假设'LongCalculation'不是依赖于行的(不包含'table'中的任何列。 – van 2010-06-13 07:20:59

相关问题