2013-07-19 2 views
0

Updateкак использовать результат запроса() значение в другом запросе [CodeIgniter]

Все ваши методы работы. Спасибо @NiloySaha, @AeroX, @Ray, @SusheelMishra.

Но что, если я хочу сравнить больше полей, таких как опыт работы, зарплата и т. Д.? @Ray я просто добавить больше Params, как так

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

} 

?

или как бы я подходил к этому? Я релевантно новичок в этом, поэтому, пожалуйста, простите меня, если я прошу noobish вопросы ..


я следующее:

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 с таблицей job_advert, которая может иметь возрастное требование, а затем отображать все в таблице членства, которая соответствует требуемому возрасту от job_advert.

+0

возвращение значения из цикла? – SachinGutte

ответ

0

Try:

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>'; 
    } 
} 
+0

плохо дать ему попробовать :) – Renier

+0

Сообщите мне, если это сработало или вам нужно что-нибудь еще –

+0

как бы я прокрутил массив в 'function another_funcion_call ($ arrayOfIdsAge)'? извините, если это noobish questuion. – Renier

0

Если я угадал, вам нужно сравнить годы. Поэтому использовать столбец вместо т, д, у

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

Я получаю возраст от южноафриканского идентификационного номера, который, если отформатирован '9109205021082', который из первых 6 цифр является« YYmmDD ». – Renier

0

Вы можете использовать MySQL, чтобы вычислить возраст человека, а затем делать это в PHP, таким образом, устраняя необходимость запуска нескольких запросов.

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

Что-то вроде выше, должны работать, чтобы преобразовать первые 6 символов на ID_NUMBER в дату и сравнить ее с текущей датой и получить разницу в годах.

+0

Я протестировал запрос, который вы мне дали, но он, похоже, не работает. Он возвращает NULL для всех в режиме «ВОЗРАСТ». – Renier

+0

У меня нет mysql для его отладки, но попробуйте разбить запрос и посмотреть, где он сбой. Попробуйте запустить 'SELECT DATE (CONCAT (LEFT (id_number, 2), '-', MID (id_number, 3,2), '-', MID (id_number, 5,2)))' bit, чтобы узнать, действительная дата сначала, если она не отменяет бит DATE() и не проверяет результат concat и т. д. – AeroX

+0

есть ошибка в запросе ... Я пробовал несколько разных способов сделать это. Если я вхожу номер идентификатора, например. «570920 ..» он выбирает год как «2057», и поэтому дает мне отрицательное значение ... – Renier

0

Просто пример, если вы не хотите назвать его в той же функции, как возраст();

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);