php 递归查询城市表信息,子数据在主数据的children字段里,不要单独传查询的城市的id,,要把表里数据全部查出
时间: 2023-12-22 20:03:03 浏览: 202
MySQL多表查询实例详解【链接查询、子查询等】
假设我们有一个城市表,其中每个城市都有一个 `id` 字段和 `children` 字段,其中 `children` 字段包含该城市的所有子城市的 `id`。
为了递归查询整个城市树,我们可以使用一个递归函数,该函数接受一个城市的 `id` 作为参数,并返回这个城市和它的所有子城市的信息。
以下是一个 PHP 递归函数的示例代码:
```php
function getCityAndChildren($cityId, $pdo) {
// 首先查询该城市的信息
$stmt = $pdo->prepare('SELECT * FROM cities WHERE id = ?');
$stmt->execute([$cityId]);
$city = $stmt->fetch(PDO::FETCH_ASSOC);
// 如果该城市有子城市,则递归查询子城市信息
if (!empty($city['children'])) {
$childrenIds = explode(',', $city['children']);
$children = [];
foreach ($childrenIds as $childId) {
$child = getCityAndChildren($childId, $pdo);
$children[] = $child;
}
$city['children'] = $children;
}
return $city;
}
```
这个函数首先查询给定城市的信息,然后检查该城市是否有子城市。如果有,它会递归调用 `getCityAndChildren()` 函数来获取每个子城市的信息,并将所有子城市的信息存储在 `$children` 数组中。最后,它将 `$children` 数组附加到 `$city` 数组中的 `children` 字段中,并返回 `$city` 数组。
我们可以使用以下代码来调用 `getCityAndChildren()` 函数:
```php
$pdo = new PDO('mysql:host=localhost;dbname=mydatabase', 'username', 'password');
$rootCity = getCityAndChildren(1, $pdo);
echo json_encode($rootCity); // 输出整个城市树的 JSON 数据
```
在这里,我们将根城市的 `id`(在本例中为 `1`)作为参数传递给 `getCityAndChildren()` 函数,并将返回的整个城市树的 JSON 数据输出到浏览器。
阅读全文