使用一个查询将多行的结果返回到单独的变量中

时间:2015-04-18 05:18:12

标签: mysql

问题:将单个列的多行中的值分配到单独变量的最快方法是什么?

使用MySQL 5.6,我有一个以常规时间间隔存储数据的表。在插入触发器中,我试图检测何时,以及其他类似的事情,"峰值"在已经出现的值中,将两个连续的增加值定义为最高值,然后是两个连续递减的值。

因为要对相同的数据执行几个类似的计算,我首先将最后五行的列中的值检索到变量中。我有行的ID号。

执行此操作的一种方法是针对每个ID进行单独的SELECT查询。但是,我想将它们合并为单个查询速度,因为数据将一次以40k行的形式输入到数据库中。

个人选择:

SET currentValue = (SELECT `value` FROM `table` WHERE `tableid`=currentID);
SET prev1Value = (SELECT `value` FROM `table` WHERE `tableid`=prev1ID);
SET prev2Value = (SELECT `value` FROM `table` WHERE `tableid`=prev2ID);
SET prev3Value = (SELECT `value` FROM `table` WHERE `tableid`=prev3ID);
SET prev4Value = (SELECT `value` FROM `table` WHERE `tableid`=prev4ID);

我知道另一种方法是在同一个表上使用连接。然而,这似乎是一种缓慢的方式。如果不使用JOIN,有更快的方法吗?感谢。

多个JOIN:

SELECT a0.`value`, a1.`value`, a2.`value`, a3.`value`, a4.`value`
        INTO currentValue, prev1Value, prev2Value, prev3Value, prev4Value
        FROM (SELECT `value` FROM `table` WHERE `tableid`=currentID) AS a0
        INNER JOIN (SELECT `value` FROM `table` WHERE `tableid`=prev1ID) AS a1
        INNER JOIN (SELECT `value` FROM `table` WHERE `tableid`=prev2ID) AS a2
        INNER JOIN (SELECT `value` FROM `table` WHERE `tableid`=prev3ID) AS a3
        INNER JOIN (SELECT `value` FROM `table` WHERE `tableid`=prev4ID) AS a4

我想到的另一件事是:

SELECT IF(`tableid`=currentID, `value`, NULL)
        , IF(`tableid`=prev1ID, `value`, NULL) 
        , IF(`tableid`=prev2ID, `value`, NULL) 
        , IF(`tableid`=prev3ID, `value`, NULL) 
        , IF(`tableid`=prev4ID, `value`, NULL) 
        INTO currentValue, prev1Value, prev2Value, prev3Value, prev4Value
        FROM `table`
        WHERE `tableid` IN (currentID, prev1ID, prev2ID, prev3ID, prev4ID);

但我还没有测试过它。

现在我将使用JOINs,直到一切就绪,我可以测试IF语句模型。但是,如果有人知道它不会起作用或者有其他方法可以更好地工作,我将不胜感激。还有,将这个放入VIEW帮助查询的速度?

感谢。

0 个答案:

没有答案