我认为这是一个非常经典的设置:假设我有table tab1
,columns 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,解决方案可能是:
答案 0 :(得分:1)
答案 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
感谢@Matt