PHP 将 MySQL 响应数组处理成唯一记录数组

标签 php mysql

在 PHP 中,我运行此查询并获得 array ,其中包含 2 条记录,每条记录有 2 个键 现在从这个 array 我需要提取唯一记录 有没有比我下面做的更专业的方法来构建这个查询,然后从数组中提取唯一记录?

P.S. position1positions2 表是相同的。所以 position1 其中一个可以被删除。

$get_positions = "SELECT positions1.pos_id1,
                         positions1.pos_name1,
                         positions2.pos_id2,
                         positions2.pos_name2
                      FROM employees
                          LEFT JOIN positions1 ON positions1.pos_id1 = employees.position1
                          LEFT JOIN positions2 ON positions2.pos_id2 = employees.position2
                              WHERE employees.status IN (1,2)
                                  GROUP BY pos_name2
                                      ORDER BY pos_id2 ASC";
$positions_res = $sql->RunSQL($get_positions, "select");

转储 $positions_res

array(2) {
  [0]=>
  array(8) {
    [0]=>
    string(1) "4"
    ["pos_id1"]=>
    string(1) "4"
    [1]=>
    string(27) "Driver"
    ["pos_name1"]=>
    string(27) "Driver"
    [2]=>
    string(1) "2"
    ["pos_id2"]=>
    string(1) "2"
    [3]=>
    string(9) "Cook"
    ["pos_name2"]=>
    string(9) "Cook"
  }
  [1]=>
  array(8) {
    [0]=>
    string(2) "19"
    ["pos_id1"]=>
    string(2) "19"
    [1]=>
    string(23) "Guard"
    ["pos_name1"]=>
    string(23) "Guard"
    [2]=>
    string(2) "19"
    ["pos_id2"]=>
    string(2) "19"
    [3]=>
    string(23) "Guard"
    ["pos_name2"]=>
    string(23) "Guard"
  }
}

代码继续

$pos_list = array();
$i = 0;
for ($n = 0; $n < count($positions_res); $n++) {

    if ($positions_res[$n]["pos_name1"] == $positions_res[$n]["pos_name2"]) {
        $pos_list[$i]["id"] = $positions_res[$n]["pos_id1"];
        $pos_list[$i]["name"] = $positions_res[$n]["pos_name1"];
        $i++;
    } else {
        $pos_list[$i]["id"] = $positions_res[$n]["pos_id1"];
        $pos_list[$i]["name"] = $positions_res[$n]["pos_name1"];
        $i++;
        $pos_list[$i]["id"] = $positions_res[$n]["pos_id2"];
        $pos_list[$i]["name"] = $positions_res[$n]["pos_name2"];
        $i++;
    }
}

var_dump($pos_list);

最终结果转储

array(3) {
  [0]=>
  array(2) {
    ["id"]=>
    string(1) "4"
    ["name"]=>
    string(27) "Driver"
  }
  [1]=>
  array(2) {
    ["id"]=>
    string(1) "2"
    ["name"]=>
    string(9) "Cook"
  }
  [2]=>
  array(2) {
    ["id"]=>
    string(2) "19"
    ["name"]=>
    string(23) "Guard"
  }
}

编辑:

我需要获取分配给员工 position1 和 position2 的所有职位的唯一职位列表(pos_id、pos_name)(对于状态为 1 和 2 的员工)。

例如员工

John 有 position1=Driver, position2=Driver, 员工 Sam 有 Poition1=Driver, Position2=Guard 员工 Mike 有 Position1=CookPosition2=Driver 所以在这种情况下我需要选择

列表:

4,  Driver
19, Guard
2,  Cook

最佳答案

查看 $sql->RunSQL() 的源代码,我敢打赌它会调用 mysql_fetch_array()没有第二个参数。该函数的默认行为是返回关联键和数字键,除非常量 MYSQL_NUMMYSQL_ASSOC 作为第二个参数传递。

将其替换为对 mysql_fetch_assoc() 的调用或 mysql_fetch_array($the_result_resource_variable, MYSQL_ASSOC) 只返回关联键而不是关联键和数字键。

关于PHP 将 MySQL 响应数组处理成唯一记录数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11697488/

相关文章:

mysql - 如何获取最近创建的行,其中几列之一具有特定值?

php - 如何在自定义 MVC .htaccess 中传递多个获取值

php - 在 s3 分段上传上设置内容类型元数据

php - PHP中关联数组的多排序

php - 如何检查表(mysql)中的时间分配重叠?

php - 如何检查我是否创建了最佳的mysql数据库?

php - 未根据数据库信息设置值

php - 根据类型对混合数组进行排序

php - 将较大的 Laravel 5 项目分解为模块的正确方法是什么?

php - DB操作,很贵吗?