MySQL select作为在PHP中定义的函数中使用的变量
我认为这是一个非常经典的设置:假设我有一个MySQL select作为在PHP中定义的函数中使用的变量,mysql,variables,select,Mysql,Variables,Select,我认为这是一个非常经典的设置:假设我有一个表tab1,其中包含列c1、c2。然后我想选择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;
表tab1
,其中包含列c1、c2
。然后我想选择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);
}
}
问题是变量根本没有更新。我在中构建了一个测试环境,为了简单起见,fun(@a,@b)
被@a
取代
更新 我原来的问题似乎不能恰当地描述我的问题。我更新了它,多亏了@wajeeh,解决方案可能是:
您可以像这样直接调用函数:
Select func(c1, c2) as r From tab1;
您可以像这样直接调用函数:
Select func(c1, c2) as r From tab1;
我不确定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 ;
我不知道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 ;
所以你可以这样做:
Select IF(c1 = 0, 0, LOG(c1)/LOG(10)+(UNIX_TIMESTAMP()-c2)/45000) as r From tab1
感谢@Matt,您可以做到这一点:
Select IF(c1 = 0, 0, LOG(c1)/LOG(10)+(UNIX_TIMESTAMP()-c2)/45000) as r From tab1
多亏了@Matt你为什么需要这个功能?直接从
tab1
中选择那些列会有什么错?fun(@a,@b)
可能非常复杂,例如我需要$3*Log(@a+1)/EXP(@b)$你为什么需要这个函数?直接从tab1
中选择那些列会有什么错?fun(@a,@b)
可能非常复杂,例如我需要$3*Log(@a+1)/EXP(@b)$是,但是这个函数必须在MYSQL中定义?在我的例子中,我在php中定义了函数,在这种情况下,fun(c1,c2)
将不起作用。如何从MySQL
中的php
调用函数?!!为此,必须将结果返回到PHP
,然后调用刚才定义的函数对其进行枚举@vanabelTry第二个答案是@vanabelYeah,我明白了,但它看起来相当复杂。特别是我想使用fun
作为结果的排名函数(按fun的mysql顺序)。是的,但是该函数必须在mysql中定义吗?在我的例子中,我在php中定义了函数,在这种情况下,fun(c1,c2)
将不起作用。如何从MySQL
中的php
调用函数?!!为此,必须将结果返回到PHP
,然后调用刚才定义的函数对其进行枚举@vanabelTry第二个答案是@vanabelYeah,我明白了,但它看起来相当复杂。特别是我想使用fun
作为结果的排名函数(按fun的mysql顺序)。我几乎做了完全相同的翻译,但是有一个问题(不是你自己回答,而是我原来的问题)如何在Laravel中初始化它,请看你是否感兴趣。我几乎做了完全相同的翻译,但是还有一个问题(不是你自己回答,而是我原来的问题)如何在Laravel中初始化它,请看你是否感兴趣。有没有可能将常量45000
作为PHP传入的变量?e、 g.$T=45000
,事实上,我在Laravel 5中将其定义为env
常量。如果直接从PHP
定义查询,当然可以这样做。比如:$T=45000$sql=“从tab1中选择….$T….”
然后调用查询。是否有可能将常量45000
作为PHP传入的vaiable?e、 g.$T=45000
,事实上,我在Laravel 5中将其定义为env
常量。如果直接从PHP
定义查询,当然可以这样做。比如:$T=45000$sql=“从表1中选择….$T….”
然后调用查询。