MySQL选择作为变量用于PHP

时间:2016-04-22 05:39:15

标签: mysql variables select

我认为这是一个非常经典的设置:假设我有table tab1columns c1, c2。然后我希望select c1, c2作为另一个选择中的函数fun(a,b)的变量:

SELECT fun(@a,@b) as r FROM (SELECT @a:=c1, @b:=c2 FROM tab1) AS tab ORDER BY r LIMIT 10;

乐趣是在PHP中预先定义的:

function fun($d, $t){
      $timenow = time();
      $perd = 45000;
      $di = (int)$d;
      $tf = (float)$t;
      if ($di === 0)
      {
        return 0;
      }else{
        return (Log($di)/Log(10)+($timenow-$tf)/$perd);
      }
    }

问题是变量根本没有更新。我在http://sqlfiddle.com/#!9/9ffd6中构建了一个测试环境,为简单起见,fun(@a,@b)@a替换。

更新

似乎我的原始问题可以正确描述我的问题。我更新了它,感谢@wajeeh,解决方案可能是:

  1. 将我的php函数转换为MYSQL格式(对我来说这很难)
  2. 使用php函数,但将mysql结果作为数组返回。 (在这种情况下,我需要手工编写odering函数!然后(也许)需要另一个SELECT的MYSQL?)

4 个答案:

答案 0 :(得分:1)

你可以直接调用这个函数:

Select func(c1, c2) as r From tab1;

SQLFiddle

答案 1 :(得分:1)

public function func($param1, $param2) {
    // your code
}

$query = "Select c1, c2 From tab";
$stmt = $link->prepare($query);
if ($stmt->execute()) {
    while ($row = $stmt->fetch(PDO::FETCH_NAMED)) {
        func($row["c1"], $row["c2"]); 
    }
}

答案 2 :(得分:1)

我不确定PHP函数的作用或工作原理,所以这可能不是MySQL函数的完美翻译,但希望你可以将它作为起点。

DELIMITER //
CREATE FUNCTION FUN(d INT, t FLOAT)
RETURNS FLOAT DETERMINISTIC NO SQL
BEGIN
    IF d = 0 THEN
        RETURN 0;
    ELSE
        RETURN LOG(d)/LOG(10)+(UNIX_TIMESTAMP()-t)/45000;
    END IF;
END//
DELIMITER ;

答案 3 :(得分:0)

所以你可以这样做:

Select IF(c1 = 0, 0, LOG(c1)/LOG(10)+(UNIX_TIMESTAMP()-c2)/45000) as r From tab1

SQLFiddle

感谢@Matt