如何为下面给出的方案创建SQL查询?

时间:2013-07-10 14:06:47

标签: php mysql sql arrays associative-array

我有一个名为$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)

2 个答案:

答案 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;

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