繁体   English   中英

MySQL-通过一次选择使用外部参照表从相关表中获取数据

[英]mySQL - Get data from related table using xref table in a single select

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

有什么方法可以使用单个选择和条件来做到这一点?

看看这是否使您接近想要的位置:

查询:

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()或类似的实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM