【问题标题】:how to use a query result() value in another query[codeigniter]如何在另一个查询中使用查询结果()值[codeigniter]
【发布时间】:2013-07-19 11:03:12
【问题描述】:

更新

您的所有方法都有效。谢谢@NiloySaha、@AeroX、@Ray、@SusheelMishra。

但是如果我想比较更多的领域,比如工作经验、薪水等呢? @Ray 我只是像这样添加更多参数

function check_job_adverts($age, $experience, $salary){

}

?

或者我将如何处理这个问题? 我对此很陌生,所以如果我问了一些无聊的问题,请原谅..


我有以下几点:

function age() {
        $sql = "SELECT * FROM membership";
        $query = $this->db->query($sql)->result();
        foreach ($query as $row) {
            $id = $row->id_number;
            $dobs = substr($id, 0, 6);
            $dob = str_split($dobs, 2);
            $day = date('d', mktime(0, 0, 0, 0, $dob[2], 0));
            $month = date('m', mktime(0, 0, 0, $dob[1] + 1, 0, 0));
            $year = date('o', mktime(0, 0, 0, 0, 0, $dob[0] + 1));
            $date = "$day/$month/$year";
            //explode the date to get month, day and year
            $date = explode("/", $date);
            //get age from date or birthdate
            $age = (date("md", date("U", mktime(0, 0, 0, $date[0], $date[1], $date[2]))) > date("md") ? ((date("Y") - $date[2]) - 1) : (date("Y") - $date[2]));
            return $age;
        }

我想知道如何在另一个查询中使用 $age 变量。例如: 我想将$age 与可以有年龄要求的job_advert 表进行比较,然后在满足job_advert 所需年龄的成员表中显示所有内容。

【问题讨论】:

  • 从循环中返回值?

标签: php mysql database codeigniter codeigniter-2


【解决方案1】:

试试:

function age() {
    $data   = array();
    $sql = "SELECT * FROM membership";
    $query = $this->db->query($sql)->result();
    foreach ($query as $key=>$row) {
        $id = $row->id_number;
        $dobs = substr($id, 0, 6);
        $dob = str_split($dobs, 2);
        $day = date('d', mktime(0, 0, 0, 0, $dob[2], 0));
        $month = date('m', mktime(0, 0, 0, $dob[1] + 1, 0, 0));
        $year = date('o', mktime(0, 0, 0, 0, 0, $dob[0] + 1));
        $date = "$day/$month/$year";
        //explode the date to get month, day and year
        $date = explode("/", $date);
        //get age from date or birthdate
        $age = (date("md", date("U", mktime(0, 0, 0, $date[0], $date[1], $date[2]))) > date("md") ? ((date("Y") - $date[2]) - 1) : (date("Y") - $date[2]));
        #return $age;                       #not returning the age now instead inserting in a array
        $data[$key]['id'] = $id;
        $data[$key]['age'] = $age;
    }
    $data = $this->another_funcion_call($data);     #calling another function which will recieve the array of ids / age
    return $data;
}

function another_funcion_call($arrayOfIdsAge){
    //loop through the array and do something
    foreach($arrayOfIdsAge as $key=>$each){
        echo "ID :".$each['id'].' AGE : '.$each['age'].'<br>';
    }
}

【讨论】:

  • 如何循环遍历function another_funcion_call($arrayOfIdsAge) 中的数组?抱歉,如果这是一个愚蠢的问题。
  • 更改了上面的答案,检查。
【解决方案2】:

如果我猜对了,您需要比较年份。 所以使用 column 而不是 m, d, y

select FLOOR(DATEDIFF('2013-07-19','2013-05-10'))

【讨论】:

  • 我从一个南非身份证号码中获取年龄,如果格式为 9109205021082,前 6 位数字中的哪一个是 YYmmDD
【解决方案3】:

您可以使用 mysql 来计算人的年龄,而不是在 PHP 中进行计算,从而无需运行多个查询。

SELECT YEAR( DATEDIFF( CURDATE(), DATE(CONCAT( LEFT(id_number,2), '-', MID(id_number,3,2), '-', MID(id_number,5,2) ))) ) AS AGE

类似上面的方法应该可以将 id_number 的前 6 个字符转换为日期,并将其与当前日期进行比较,并获得年份差异。

【讨论】:

  • 我测试了你给我的查询,但它似乎不起作用..它为AGE中的所有内容返回NULL。
  • 我没有安装 mysql 来调试它,但尝试分解查询并查看它失败的地方。尝试运行 SELECT DATE(CONCAT( LEFT(id_number,2), '-', MID(id_number,3,2), '-', MID(id_number,5,2) )) 位以查看是否首先生成有效日期,如果没有则将 DATE() 位关闭并检查 concat 结果等。
  • 查询中有一个缺陷...我尝试了多种不同的方法来做到这一点..如果我输入一个身份证号码,例如。 “570920..”它将年份选为2057,因此给了我一个负值...
  • 您可以通过在年份部分之前添加前缀“19”+ 来强制它与 1957 年一样互操作;目前它留给服务器来决定 2 位数年份属于哪个世纪。这是以 2 位数格式存储日期的缺点。您可以采用两位数格式表示当前年份,并说如果年份更高,则在两位数年份上加上前缀“19”,否则前缀“20”。
【解决方案4】:

如果您不想在与 age() 相同的函数中调用它,只是一个示例;

function age() {
    $sql = "SELECT * FROM membership";
    $query = $this->db->query($sql)->result();
    foreach ($query as $row) {
        $id = $row->id_number;
        $dobs = substr($id, 0, 6);
        $dob = str_split($dobs, 2);
        $day = date('d', mktime(0, 0, 0, 0, $dob[2], 0));
        $month = date('m', mktime(0, 0, 0, $dob[1] + 1, 0, 0));
        $year = date('o', mktime(0, 0, 0, 0, 0, $dob[0] + 1));
        $date = "$day/$month/$year";
        //explode the date to get month, day and year
        $date = explode("/", $date);
        //get age from date or birthdate
        $age = (date("md", date("U", mktime(0, 0, 0, $date[0], $date[1], $date[2]))) >     date("md") ? ((date("Y") - $date[2]) - 1) : (date("Y") - $date[2]));
        return $age;
    }

function check_job_adverts($age){
// here goes your job_advert checking function
// example.. run an array to match ages vs jobs
// mind the array return if multiple options
}




$age = age();
// somewhere else in your script make the call with $age
$fetchJobs = check_job_adverts($age);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2016-04-06
    • 2011-12-02
    • 1970-01-01
    相关资源
    最近更新 更多