我有一个名为$arrResult
的数组。我从复杂的JOIN SQL查询中收到了这个数组。供你参考我在这里打印数组:
Array
(
[21e86b3ebf6a8af2a9fcf136c4f8e88a] => 1
[e7e95de96987cc7c89c1f0183110fb38] => 3
[42eaca88ae0079a77604d75d30846e46] => 1
[fc55acb1edc47d2dc339562db4c13729] => 1
[9f27643023a83addd5eed41c4aade840] => 3
[5810758e0ee945090506e02c35222f0e] => 3
)
正如您所看到的,键(即test_pack_id
)在数组中是不同的,但值(即test_pack_type_id
)正在重复。在某些情况下,值可能是唯一的。
数据库中有一个名为test_packages
的表,其中包含字段test_pack_id
,该字段也是该表的主键。 test_pack_id
字段包含来自上面数组的值(即上面数组的键)以及已经存在的其他类似值。该表有另一个名为test_pack_type_id
的字段,其中包含上述数组中的值(即1,3等)
现在,我想只从这个表中获取那些test_pack_id
不等于上面数组中test_pack_id
但是与该特定test_pack_id相关联的test_pack_type_id
的记录。< / p>
此外,要求是获取的test_pack_ids应按test_pack_type_id
分组。我尝试了许多技巧来获得理想的结果但却无法得到它。任何人都可以帮助我获得理想的结果吗?
表test_packages的结构如下:
test_pack_id varchar(32)
test_pack_name varchar(255)
test_pack_desc text
test_pack_type_id smallint(4)
答案 0 :(得分:4)
这里我假设您已经从数据库中提取了问题中给出的数组值
$data = Array
(
[21e86b3ebf6a8af2a9fcf136c4f8e88a] => 1
[e7e95de96987cc7c89c1f0183110fb38] => 3
[42eaca88ae0079a77604d75d30846e46] => 1
[fc55acb1edc47d2dc339562db4c13729] => 1
[9f27643023a83addd5eed41c4aade840] => 3
[5810758e0ee945090506e02c35222f0e] => 3
);
$sep = "";
$pack_str = "";
$pack_type_arr = array();
foreach($data as $key=>$val)
{
$pack_str = $sep.$pack_str;
if(!in_array($val,$pack_type_arr))
$pack_type_arr = $val;
$sep = ",";
}
$pack_type_str = implode(",",$pack_type_arr);
$sql = "SELECT *
FROM test_packages
WHERE test_pack_id not in ($pack_str)
AND test_pack_type_id IN ($pack_type_str)
ORDER BY test_pack_type_id ASC";
//then execute the query and extract the resource in variable(say $query)
while($row = mysql_fetch_assoc($query))
{
$output[$row['test_pack_type_id']][] = $row['test_pack_id'];
}
//Thus $output gives you the key(test_pack_type_id) value(test_pack_id) association
我希望这可以提供一些帮助。
答案 1 :(得分:0)
SELECT DISTINCT test_pack_id,
test_pack_type_id,
FROM test_packages
WHERE test_pack_id not in ('21e86b3ebf6a8af2a9fcf136c4f8e88a', 'e7e95de96987cc7c89c1f0183110fb38', ...)
GROUP BY test_pack_type_id
ORDER BY test_pack_type_id ASC;
希望我已正确理解要求:)