【发布时间】:2012-07-28 01:27:21
【问题描述】:
在 PHP 中,我运行此查询并获得 array,其中有 2 条记录,每条记录有 2 个键
现在从这个array 我需要提取唯一记录
有没有比我在下面做的更专业的方法来构建这个查询然后从数组中提取唯一记录?
P.S. position1 和 positions2 表是相同的。所以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 的员工)。
例如员工
约翰有position1=Driver、position2=Driver、
员工山姆有Poition1=Driver,Position2=Guard
员工迈克有Position1=Cook,Position2=Driver
所以在这种情况下我需要选择
列表:
4, Driver
19, Guard
2, Cook
【问题讨论】:
-
那么,您得到的是任何具有 1 或 2 状态的员工所担任的所有职位?如果同一员工担任 2 个职位,那么您希望他们都出现在您的结果中。您的服务器端逻辑向我暗示您可能可以在 SQL 中做同样的减少。在您的 PS 中,您是说 position1 和 position2 是相同的吗?它们是否拥有相同的数据或只是相同的结构?另外,您使用的 DBO 是什么。我不熟悉具有 RunSQL 方法的方法。
-
您所说的 DBO 是指存储引擎吗?我使用默认的 MyISAM。是的,两个表位置1 和位置1 以及它们中的数据相同。我需要获取分配给员工 position1 和 position2 的所有职位的唯一职位列表(pos_id、pos_name)(对于状态为 1 和 2 的员工)。
-
我想知道您正在使用的数据库对象或库的名称是什么。常见的有 PDO、mysqli_、MDB2 等,但我对 RunSQL 方法不熟悉。
-
好的,我使用 mysql 库(不是 PDO 或 MySQLi)并且 RunSQL() 只是我创建的函数的名称 - 它使用 mysql_query() 访问数据库;