如果数组匹配,则比较两个数组和返回id

时间:2016-04-05 12:10:20

标签: php mysql arrays codeigniter

我在codeigniter工作。我有两个表job_post和snapshot.I已经编写了查询来从上面的表中获取数据,如:

查询1:

select skill from snapshot where user_id = 1

它给出了数组:

Array
(
[0] => stdClass Object
    (
        [skill] => 1,2
    )
)

查询2:

select emp_id,skill from job_post

并且此查询返回如下数组:

Array
(
[0] => stdClass Object
    (
        [emp_id] => 10
        [skill] => 1,2,3
    )

[1] => stdClass Object
    (
        [emp_id] => 10
        [skill] => 3,12,13
    )
)

现在,我想将这些与数组匹配。如果 query1 技能与 query2 技能匹配,则返回emp_id。那我怎么能得到那个emp_id?

注意:与query1和query2

的部分匹配

3 个答案:

答案 0 :(得分:1)

将查询的响应存储在变量中,可以在$ mySkill中找到。

select skill from snapshot where user_id = 1;

"select emp_id,skill from job_post where concat(',',skill,',') like '%,".$mySkill.",%'"

替代方案:你需要爆炸$ myskill&然后需要动态创建或调整。像:

$arrmyskill = explode(",",$mySkill); 
foreach($arrmyskill as $skill )
{ 
   $str .=" or concat(',',skill,',') like '%,".$skill.",%' ";
} 
$finalqry = "select emp_id,skill from job_post where concat(',',skill,',') like '%".$mySkill."%'" .$str;

答案 1 :(得分:0)

尝试此代码,它将解决您的问题

<?php 
$arr1 = array('skill'=> '1,2,3');
$arr2 = array(array('emp_id'=>1,'skill'=> '1,2,3'),array('emp_id'=>1,'skill'=> '1,2,4'));
foreach($arr2 as $key => $val)
{
    if($val['skill']== $arr1['skill'])
    {
        echo 'Matched Id :'.$val['emp_id'];
    }
}
?>

这将输出:

Matched Id :1

答案 2 :(得分:0)

为什么不使用单个SQL查询来加入两个表?如果任何技能匹配,则查询将为您提供所需的具有匹配技能的emp_id。

SELECT
    j.emp_id,
    GROUP_CONCAT(j.skill) AS skills
FROM
    job_post j
    INNER JOIN `snapshot` s ON s.skill = j.skill
WHERE
    s.user_id = 1
GROUP BY
    j.emp_id