0

我有一个名为$arrResult. 我从复杂的 JOIN SQL 查询中收到了这个数组。供您参考,我在这里打印数组:

Array
(
    [21e86b3ebf6a8af2a9fcf136c4f8e88a] => 1
    [e7e95de96987cc7c89c1f0183110fb38] => 3
    [42eaca88ae0079a77604d75d30846e46] => 1
    [fc55acb1edc47d2dc339562db4c13729] => 1
    [9f27643023a83addd5eed41c4aade840] => 3
    [5810758e0ee945090506e02c35222f0e] => 3
)

如您所见,test_pack_id数组中的键 (ie ) 不同,但值 (ie 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_type_id与该特定 test_pack_id 关联的记录。

此外,要求是获取的 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)
4

2 回答 2

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

我希望这能有所帮助。

于 2013-07-10T15:33:33.313 回答
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;

希望我已经正确理解了要求:)

于 2013-07-10T15:11:22.917 回答