Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL select作为在PHP中定义的函数中使用的变量_Mysql_Variables_Select - Fatal编程技术网

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,解决方案可能是:

  • 将我的php函数转换成MYSQL表单(这对我来说有点难)
  • 使用php函数,但将mysql结果作为数组返回。(在这种情况下,我需要手工编写订购函数!然后(可能)需要另一个MYSQL选项?)

  • 您可以像这样直接调用函数:

    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….”
    然后调用查询。