我有两张分开的table州和城市。我需要一个sql(mysql)语句或php查询来获取以下格式的输出数据(基本上把各个州的城市分组)。我需要的输出示例(json)
"Andaman and nicobar" : ['Port Blair', 'Adilabad'], "Tamilnadu" : ['Chennai', 'Coimbatore'], "Maharastra" : ['Mumbai', 'Lonavala', 'Pune'],
我有如下的数据库表。
wribegjk1#
你应该 left join 在sql中使用states表和cities表,然后在php中循环其结果并生成所需的输出。下面我使用的是纯php(假设连接已经由 $conn )使用数据库。如果使用任何框架,都应该实现自己的框架。
left join
$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);
mkshixfv2#
这是另一个使用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);
2条答案
按热度按时间wribegjk1#
你应该
left join
在sql中使用states表和cities表,然后在php中循环其结果并生成所需的输出。下面我使用的是纯php(假设连接已经由$conn
)使用数据库。如果使用任何框架,都应该实现自己的框架。mkshixfv2#
这是另一个使用codeigniter数据库函数的版本。它还使用一个右连接,从结果集中删除没有任何关联城市的州。