在子组中的每条记录上的MySQL子查询

Ian*_*Ian 5 php mysql group-by

这是早期问题的更高级续集.

这是一个指向SQLFiddle的链接,使事情更清晰一些

我需要返回类似的内容(对于每个位置):

底层
---------------
车库
- 散热器
厨房
- 电磁炉
- 冰箱

将会有更多的水平,但如果我能够开始,我希望能够根据需要进一步发展.

谢谢

Mic*_*ski 2

由于 SQL 无法返回上面格式化的嵌套记录,因此您只需返回一个查询,该查询按楼层然后按 sub_location 对行进行排序。每行都会得到 和location,sub_location但在打印结果时的应用程序代码循环中,您可以按照上面的方式设置它们的格式。

SELECT
  location.location_name,
  sublocation.sub_location_name,
  asset.asset_name
FROM
  location
  LEFT JOIN sub_location ON location.location_key = sublocation.location_key
  LEFT JOIN assets ON sub_location.sub_location_key = assets.sub_location_key
ORDER BY
  location.location_name,
  sub_location.sub_location_name
Run Code Online (Sandbox Code Playgroud)

当在应用程序中循环遍历行集时,您仅在新位置或 sub_location 发生更改时打印它。格式化是在代码中完成的。

假设您的行都在数组中$rowset:

// Store location, sub_location for each loop
$current_loc = "";
$current_subloca = "";
foreach ($rowset as $row) {
  // If the location changed, print it
  if ($row['location'] != $current_loc) {
    echo $row['location_name'] . "\n";
    // Store the new one
    $current_loc = $row['location_name'];
  }
  // If the sub_location changed, print it
  if ($row['sub_location'] != $current_subloc) {
    echo $row['sub_location_name'] . "\n";
    $current_subloc = $row['sub_location_name'];
  }
  echo $row['asset_name'] . "\n";      
}
Run Code Online (Sandbox Code Playgroud)