mySQL - 在单个选择中使用xref表从相关表中获取数据

时间:2012-06-12 05:20:47

标签: php mysql

我有两个表,A和B,它们在AB_xref中一起外部参照。目前从表B获取数据我将所有行从A转储到数组中,然后循环遍历每个索引,找到与该A行相关的多个B行。然后我将B中的行拼接到A的行数组中 - 创建一个嵌套数组。

使用单个选择和条件有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

看看这是否能让你到达你想要的地方:

查询:

SELECT
   packages.name AS package_name,
   activities.name AS activity_name
FROM
   package_activity_xref pax
INNER JOIN packages ON packages.id = pax.package_id
INNER JOIN activities ON activities.id = pax.activity_id

PHP:

$results = get_assoc_array_from_sql($your_query);
$outputArray = array();

foreach($results as $result) {
   if (array_key_exists($result['package_name'], $outputArray)) {
      // we already have an array at this package, push the new item
      array_push($outputArray[$result['package_name']], $result['activity_name']);
   } else {
      // the target array doesn't exist yet, make it
      $outputArray[$result['package_name']] = array($result['activity_name']);
   }
}

基本上,此代码将遍历整个外部参照表一次(O(n),其中n是外部参照中的记录数)。对于每条记录,它将查看包名称,并查看该密钥是否存在于$outputArray中。如果没有,请将该键的值设为具有当前活动名称的数组。如果确实存在,则将当前活动附加到该数组。

如果在执行后执行print_r($outputArray),您应该看到一个包含x项的数组,其中x是不同包的数量。数组中的每个元素都是另一个包含y元素的数组,其中y是给定包的活动数。

注意:您需要自己实施get_assoc_array_from_sql,但我假设您已经使用了一些实现,或者您正在使用mysqli_fetch_assoc()或类似的东西。