2017-05-12 16 views
0

私のウェブサイトで国、州、都市を選択します。 データベースに国、州、市のテーブルがあります。これに、データベースからデータを変換する方法Angularjs:国、都道府県、都市から選択します。

街テーブル

CREATE TABLE IF NOT EXISTS `cities` (
    `city_id` int(11) NOT NULL, 
    `city_name` varchar(30) COLLATE utf8_unicode_ci NOT NULL, 
    `state_id` int(11) NOT NULL, 
    `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0:Blocked, 1:Active' 
) ENGINE=InnoDB AUTO_INCREMENT=6178 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

国テーブル

CREATE TABLE IF NOT EXISTS `countries` (
    `country_id` int(11) NOT NULL, 
    `country_name` varchar(30) CHARACTER SET utf8 NOT NULL, 
    `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0:Blocked, 1:Active' 
) ENGINE=InnoDB AUTO_INCREMENT=240 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

ステージテーブル

CREATE TABLE IF NOT EXISTS `states` (
    `state_id` int(11) NOT NULL, 
    `state_name` varchar(30) COLLATE utf8_unicode_ci NOT NULL, 
    `country_id` int(11) NOT NULL, 
    `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0:Blocked, 1:Active' 
) ENGINE=InnoDB AUTO_INCREMENT=1652 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

$scope.countries = { 
     'usa': { 
      'San Francisco': ['SOMA', 'Richmond', 'Sunset'], 
      'Los Angeles': ['Burbank', 'Hollywood'] 
     }, 
     'canada': { 
      'People dont live here': ['igloo', 'cave'] 
     } 
    }; 

またはもっと良い方法があれば。親切に私を見せてください。

ありがとうございました!次のデータセットを考慮

+1

どのような種類データベースの? DBをjsonオブジェクトに変換するのではなく、直接クエリしないでください。 – ZombieChowder

+2

データはどのようにデータベースに格納されていますか? –

+0

これまでに何を試しましたか? – rrd

答えて

0

...

DROP TABLE IF EXISTS cities; 

CREATE TABLE `cities` (
    `city_id` int(11) NOT NULL, 
    `city_name` varchar(30) COLLATE utf8_unicode_ci NOT NULL, 
    `state_id` int(11) NOT NULL, 
    `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0:Blocked, 1:Active' 
) ENGINE=InnoDB AUTO_INCREMENT=6178 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

DROP TABLE IF EXISTS countries; 

CREATE TABLE `countries` (
    `country_id` int(11) NOT NULL, 
    `country_name` varchar(30) CHARACTER SET utf8 NOT NULL, 
    `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0:Blocked, 1:Active' 
) ENGINE=InnoDB AUTO_INCREMENT=240 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

DROP TABLE IF EXISTS states; 

CREATE TABLE `states` (
    `state_id` int(11) NOT NULL, 
    `state_name` varchar(30) COLLATE utf8_unicode_ci NOT NULL, 
    `country_id` int(11) NOT NULL, 
    `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0:Blocked, 1:Active' 
) ENGINE=InnoDB AUTO_INCREMENT=1652 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

INSERT INTO cities VALUES 
(1,'San Francisco',1,1), 
(2,'Los Angeles',1,1), 
(3,'Winnipeg',2,1), 
(4,'Toronto',3,1); 

INSERT INTO states VALUES 
(1,'California',1,1), 
(2,'Manitoba',2,1), 
(3,'Ontario',2,1); 

INSERT INTO countries VALUES 
(1,'USA',1), 
(2,'Canada',1); 

SELECT x.country_id 
    , x.country_name 
    , y.state_id 
    , y.state_name 
    , z.city_id 
    , z.city_name 
    FROM countries x 
    JOIN states y 
    ON y.country_id = x.country_id 
    JOIN cities z 
    ON z.state_id = y.state_id; 
+------------+--------------+----------+------------+---------+---------------+ 
| country_id | country_name | state_id | state_name | city_id | city_name  | 
+------------+--------------+----------+------------+---------+---------------+ 
|   1 | USA   |  1 | California |  1 | San Francisco | 
|   1 | USA   |  1 | California |  2 | Los Angeles | 
|   2 | Canada  |  2 | Manitoba |  3 | Winnipeg  | 
|   2 | Canada  |  3 | Ontario |  4 | Toronto  | 
+------------+--------------+----------+------------+---------+---------------+ 

次のコードが出力されます望ましい結果を...

<?php 

    require('path/to/connection/stateme.nts'); 

    $query = " 
    SELECT x.country_id 
     , x.country_name 
     , y.state_id 
     , y.state_name 
     , z.city_id 
     , z.city_name 
     FROM countries x 
     JOIN states y 
     ON y.country_id = x.country_id 
     JOIN cities z 
     ON z.state_id = y.state_id; 
    "; 

    $result = mysqli_query($db,$query) or die(mysqli_error($db)); 

    $my_array = array(); 

    while($row = mysqli_fetch_assoc($result)) 
     { 
      $my_array[] = $row; 
     } 

    print_r($my_array); 

    $new_array = array(); 

    foreach($my_array as $row){ 
    $new_array[$row['country_name']][$row['state_name']][]=$row['city_name']; 
    } 

    $my_json = json_encode($new_array); 

    print $my_json; 

    ?> 

この出力...

{"USA":{"California":["San Francisco","Los Angeles"]},"Canada":{"Manitoba":["Winnipeg"],"Ontario":["Toronto"]}} 
関連する問題