| 1 |
|
|---|
| 2 |
-- ��������CREATE TABLE types( |
|---|
| 3 |
id INT(1) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, |
|---|
| 4 |
short_name VARCHAR(10) NOT NULL, |
|---|
| 5 |
name VARCHAR(40) NOT NULL, |
|---|
| 6 |
INDEX (short_name) |
|---|
| 7 |
) TYPE = innodb; |
|---|
| 8 |
INSERT INTO types(short_name, name) |
|---|
| 9 |
SELECT DISTINCT scname, socrname FROM SOCRBASE; |
|---|
| 10 |
|
|---|
| 11 |
|
|---|
| 12 |
-- ������CREATE TABLE regions ( |
|---|
| 13 |
id INT(1) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, |
|---|
| 14 |
name VARCHAR(40) NOT NULL, |
|---|
| 15 |
type INT(1) UNSIGNED NOT NULL, |
|---|
| 16 |
_index CHAR(6) NOT NULL, |
|---|
| 17 |
code CHAR(2) NOT NULL, |
|---|
| 18 |
INDEX (name), |
|---|
| 19 |
INDEX (type), |
|---|
| 20 |
UNIQUE INDEX (code) |
|---|
| 21 |
) TYPE = innodb; |
|---|
| 22 |
INSERT INTO regions(name, type, _index, code) |
|---|
| 23 |
SELECT KLADR.name, types.id, _index, LEFT(code,2) |
|---|
| 24 |
FROM KLADR |
|---|
| 25 |
INNER JOIN types ON KLADR.socr = types.short_name |
|---|
| 26 |
WHERE RIGHT(code,11)="00000000000"; |
|---|
| 27 |
|
|---|
| 28 |
-- ����� |
|---|
| 29 |
CREATE TABLE zones ( |
|---|
| 30 |
id INT(1) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, |
|---|
| 31 |
name VARCHAR(40) NOT NULL, |
|---|
| 32 |
type INT(1) UNSIGNED NOT NULL, |
|---|
| 33 |
_index CHAR(6) NOT NULL, |
|---|
| 34 |
parent_region INT(1) UNSIGNED NULL, |
|---|
| 35 |
code CHAR(5) NOT NULL, |
|---|
| 36 |
INDEX (name), |
|---|
| 37 |
INDEX (type), |
|---|
| 38 |
UNIQUE INDEX (code), |
|---|
| 39 |
INDEX (parent_region) |
|---|
| 40 |
) TYPE = innodb; |
|---|
| 41 |
INSERT INTO zones(name, type, _index, code) |
|---|
| 42 |
SELECT KLADR.name, types.id, _index, LEFT(code,5) |
|---|
| 43 |
FROM KLADR |
|---|
| 44 |
INNER JOIN types ON KLADR.socr = types.short_name |
|---|
| 45 |
WHERE RIGHT(code,8)="00000000" AND SUBSTRING(code,3,3) <>"000"; |
|---|
| 46 |
UPDATE zones SET parent_region = (SELECT id FROM regions WHERE code = LEFT(zones.code,2)); |
|---|
| 47 |
|
|---|
| 48 |
|
|---|
| 49 |
CREATE TABLE cities ( |
|---|
| 50 |
id INT(1) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, |
|---|
| 51 |
name VARCHAR(40) NOT NULL, |
|---|
| 52 |
type INT(1) UNSIGNED NOT NULL, |
|---|
| 53 |
_index CHAR(6) NOT NULL, |
|---|
| 54 |
parent_region INT(1) UNSIGNED NULL, |
|---|
| 55 |
parent_zone INT(1) UNSIGNED NULL, |
|---|
| 56 |
code CHAR(8) NOT NULL, |
|---|
| 57 |
INDEX (name), |
|---|
| 58 |
INDEX (type), |
|---|
| 59 |
UNIQUE INDEX (code), |
|---|
| 60 |
INDEX (parent_region), |
|---|
| 61 |
INDEX (parent_zone) |
|---|
| 62 |
) TYPE = innodb; |
|---|
| 63 |
INSERT INTO cities(name, type, _index, code) |
|---|
| 64 |
SELECT KLADR.name, types.id, _index, LEFT(code,8) |
|---|
| 65 |
FROM KLADR |
|---|
| 66 |
INNER JOIN types ON KLADR.socr = types.short_name |
|---|
| 67 |
WHERE RIGHT(code,5)="00000" AND SUBSTRING(code, 6, 3)<>"000"; |
|---|
| 68 |
UPDATE cities SET parent_region = (SELECT id FROM regions WHERE code = LEFT(cities.code,2)); |
|---|
| 69 |
UPDATE cities SET parent_zone = (SELECT id FROM zones WHERE code = LEFT(cities.code,5)); |
|---|
| 70 |
|
|---|
| 71 |
-- ������ ���CREATE TABLE settlements ( |
|---|
| 72 |
id INT(1) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, |
|---|
| 73 |
name VARCHAR(40) NOT NULL, |
|---|
| 74 |
type INT(1) UNSIGNED NOT NULL, |
|---|
| 75 |
_index CHAR(6) NOT NULL, |
|---|
| 76 |
parent_region INT(1) UNSIGNED NULL, |
|---|
| 77 |
parent_zone INT(1) UNSIGNED NULL, |
|---|
| 78 |
parent_city INT(1) UNSIGNED NULL, |
|---|
| 79 |
code CHAR(11) NOT NULL, |
|---|
| 80 |
INDEX (name), |
|---|
| 81 |
INDEX (type), |
|---|
| 82 |
UNIQUE INDEX (code), |
|---|
| 83 |
INDEX (parent_region), |
|---|
| 84 |
INDEX (parent_zone), |
|---|
| 85 |
INDEX (parent_city) |
|---|
| 86 |
) TYPE = innodb; |
|---|
| 87 |
INSERT LOW_PRIORITY INTO settlements(name, type, _index, code) |
|---|
| 88 |
SELECT SQL_BIG_RESULT KLADR.name, types.id, _index, LEFT(code,11) |
|---|
| 89 |
FROM KLADR |
|---|
| 90 |
INNER JOIN types ON KLADR.socr = types.short_name |
|---|
| 91 |
WHERE RIGHT(code,2)="00" AND SUBSTRING(code, 9, 3)<>"000"; |
|---|
| 92 |
UPDATE settlements SET parent_region = (SELECT id FROM regions WHERE code = LEFT(settlements.code,2)); |
|---|
| 93 |
UPDATE settlements SET parent_zone = (SELECT id FROM zones WHERE code = LEFT(settlements.code,5)); |
|---|
| 94 |
UPDATE settlements SET parent_city = (SELECT id FROM cities WHERE code = LEFT(settlements.code,8)); |
|---|
| 95 |
|
|---|
| 96 |
-- ���� |
|---|
| 97 |
CREATE TABLE streets ( |
|---|
| 98 |
id INT(1) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, |
|---|
| 99 |
name VARCHAR(40) NOT NULL, |
|---|
| 100 |
type INT(1) UNSIGNED NOT NULL, |
|---|
| 101 |
_index CHAR(6) NOT NULL, |
|---|
| 102 |
parent_region INT(1) UNSIGNED NULL, |
|---|
| 103 |
parent_city INT(1) UNSIGNED NULL, |
|---|
| 104 |
parent_settlement INT(1) UNSIGNED NULL, |
|---|
| 105 |
code CHAR(15) NOT NULL, |
|---|
| 106 |
INDEX (name), |
|---|
| 107 |
INDEX (type), |
|---|
| 108 |
UNIQUE INDEX (code), |
|---|
| 109 |
INDEX (parent_region, parent_city, parent_settlement, name), |
|---|
| 110 |
INDEX (parent_city, parent_settlement, name), |
|---|
| 111 |
INDEX (parent_settlement, name) |
|---|
| 112 |
) TYPE = innodb; |
|---|
| 113 |
INSERT INTO streets(name, type, _index, code) |
|---|
| 114 |
SELECT SQL_BIG_RESULT STREET.name, types.id, _index, LEFT(code,15) |
|---|
| 115 |
FROM STREET |
|---|
| 116 |
INNER JOIN types ON STREET.socr = types.short_name |
|---|
| 117 |
WHERE RIGHT(code,2)="00" AND SUBSTRING(code, 12, 4)<>"0000"; |
|---|
| 118 |
UPDATE streets SET parent_region = (SELECT id FROM regions WHERE code = LEFT(streets.code,2)); |
|---|
| 119 |
UPDATE streets SET parent_city = (SELECT id FROM cities WHERE code = LEFT(streets.code,8)); |
|---|
| 120 |
UPDATE streets SET parent_settlement = (SELECT id FROM settlements WHERE code = LEFT(streets.code,11)); |
|---|
| 121 |
|
|---|
| 122 |
-- ����� |
|---|
| 123 |
CREATE TABLE buildings ( |
|---|
| 124 |
id INT(1) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, |
|---|
| 125 |
name VARCHAR(40) NOT NULL, |
|---|
| 126 |
korp CHAR(1) NOT NULL, |
|---|
| 127 |
type INT(1) UNSIGNED NOT NULL, |
|---|
| 128 |
_index CHAR(6) NOT NULL, |
|---|
| 129 |
parent_city INT(1) UNSIGNED NULL, |
|---|
| 130 |
parent_settlement INT(1) UNSIGNED NULL, |
|---|
| 131 |
parent_street INT(1) UNSIGNED NULL, |
|---|
| 132 |
code CHAR(19) NOT NULL, |
|---|
| 133 |
INDEX (name), |
|---|
| 134 |
INDEX (type), |
|---|
| 135 |
INDEX (parent_city, name), |
|---|
| 136 |
INDEX (parent_settlement, name), |
|---|
| 137 |
INDEX (parent_street, name), |
|---|
| 138 |
UNIQUE INDEX (code) |
|---|
| 139 |
) TYPE = innodb; |
|---|
| 140 |
INSERT INTO buildings(name, korp, type, _index, code) |
|---|
| 141 |
SELECT SQL_BIG_RESULT DOMA.name, DOMA.korp, types.id, _index, code |
|---|
| 142 |
FROM DOMA |
|---|
| 143 |
INNER JOIN types ON DOMA.socr = types.short_name |
|---|
| 144 |
WHERE RIGHT(code, 4)<>"0000"; |
|---|
| 145 |
UPDATE buildings SET parent_city = (SELECT id FROM cities WHERE code = LEFT(buildings.code,8)); |
|---|
| 146 |
UPDATE buildings SET parent_settlement = (SELECT id FROM settlements WHERE code = LEFT(buildings.code,11)); |
|---|
| 147 |
UPDATE buildings SET parent_street = (SELECT id FROM streets WHERE code = LEFT(buildings.code,15)); |
|---|
| 148 |
|
|---|
| 149 |
-- �������code' |
|---|
| 150 |
ALTER TABLE regions DROP code; |
|---|
| 151 |
ALTER TABLE zones DROP code; |
|---|
| 152 |
ALTER TABLE cities DROP code; |
|---|
| 153 |
ALTER TABLE settlements DROP code; |
|---|
| 154 |
ALTER TABLE streets DROP code; |
|---|
| 155 |
ALTER TABLE buildings DROP code; |
|---|
| 156 |
|
|---|
| 157 |
-- ����������/* |
|---|
| 158 |
SELECT name, id, type FROM streets FORCE INDEX(parent_settlement) WHERE parent_settlement = 12 |
|---|
| 159 |
AND name LIKE '�' |
|---|
| 160 |
LIMIT 10; |
|---|
| 161 |
SELECT name, id, type FROM streets FORCE INDEX(parent_city) WHERE parent_city = 85 |
|---|
| 162 |
AND parent_settlement IS NULL |
|---|
| 163 |
AND name LIKE '�' |
|---|
| 164 |
LIMIT 10; |
|---|
| 165 |
SELECT name, id, type FROM streets FORCE INDEX(parent_region) WHERE parent_region = 85 |
|---|
| 166 |
AND name LIKE '�' |
|---|
| 167 |
AND parent_city IS NULL |
|---|
| 168 |
AND parent_settlement IS NULL |
|---|
| 169 |
LIMIT 10; |
|---|
| 170 |
|
|---|
| 171 |
SELECT name, id, type FROM settlements WHERE parent_city = 12 |
|---|
| 172 |
AND name LIKE '�' LIMIT 10; |
|---|
| 173 |
SELECT name, id, type FROM settlements WHERE parent_zone = 12 |
|---|
| 174 |
AND name LIKE '�' LIMIT 10; |
|---|
| 175 |
SELECT name, id, type FROM settlements WHERE parent_region = 12 |
|---|
| 176 |
AND name LIKE '�' |
|---|
| 177 |
AND parent_zone IS NULL |
|---|
| 178 |
AND parent_city IS NULL LIMIT 10; |
|---|
| 179 |
|
|---|
| 180 |
SELECT name, id, type FROM cities WHERE parent_zone = 12 |
|---|
| 181 |
AND name LIKE '�' LIMIT 10; |
|---|
| 182 |
SELECT name, id, type FROM cities WHERE parent_region = 12 |
|---|
| 183 |
AND name LIKE '�' |
|---|
| 184 |
AND parent_zone IS NULL LIMIT 10; |
|---|
| 185 |
|
|---|
| 186 |
SELECT name, id, type FROM zones WHERE parent_region = 12 |
|---|
| 187 |
AND name LIKE '�' LIMIT 10; |
|---|
| 188 |
SELECT name, id, type FROM regions WHERE name LIKE '�' LIMIT 10; |
|---|
| 189 |
*/ |
|---|