codeigniter/mysql将每个州的城市分组

gmxoilav  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(327)

我有两张分开的table州和城市。我需要一个sql(mysql)语句或php查询来获取以下格式的输出数据(基本上把各个州的城市分组)。
我需要的输出示例(json)

"Andaman and nicobar" : ['Port Blair', 'Adilabad'],
"Tamilnadu" : ['Chennai', 'Coimbatore'],
"Maharastra" : ['Mumbai', 'Lonavala', 'Pune'],

我有如下的数据库表。

w8biq8rn

w8biq8rn1#

你应该 left join 在sql中使用states表和cities表,然后在php中循环其结果并生成所需的输出。下面我使用的是纯php(假设连接已经由 $conn )使用数据库。如果使用任何框架,都应该实现自己的框架。

$sql = 'SELECT st.state_name, ct.city_name FROM states st LEFT JOIN cities ct on st.state_number=ct.state_number';
$result = mysqli_query($conn, $sql);

$statesWithCities = [];
while($row = mysqli_fetch_assoc($result)) {
    $statesWithCities[$row['state_name']][] = $row['city_name'];
}

$jsonOutput = json_encode($statesWithCities);
z9ju0rcb

z9ju0rcb2#

这是另一个使用codeigniter数据库函数的版本。它还使用一个右连接,从结果集中删除没有任何关联城市的州。

$results = $this->db
           ->query('SELECT state_name, cities.city_name FROM `states` 
                    RIGHT JOIN cities ON state_number=cities.state_number')
           ->result();

$data = [];
foreach ($results as $city)
{
    $data[$city->state_name][] = $city->city_name;
}

$out = json_encode($data);

相关问题