Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите сделать функцию
|
|||
|---|---|---|---|
|
#18+
Проблема следующая: нужна функция, которая бы формировала и возвращала строку(адрес), на основе переданной в нее строки(кода). Помогите сделать, так как я полный ламер в этих вопросах. Поясню подробнее. В функцию передается код адреса(КЛАДРовский) 15 символов. 2 - область (region) 3 - район (zone) 3 - город (city) 3 - населенный пункт (settlement) 4 - улица (street) Выборка делается из двух таблиц: kladr, streets. kladr(name, socr, code) streets(name, socr, code) Алгоритм такой: 1. В таблице kladr ищется строка вида region + "00000000000" в столбце code и в возвращаемую строку добавляется значение столбца name. 2. Если zone != "000", в таблице kladr ищется строка вида region + zone + "00000000" в столбце code и в возвращаемую строку добавляется значение столбца name. 3. Если city != "000", в таблице kladr ищется строка вида region + zone + city + "00000" в столбце code и в возвращаемую строку добавляется значение столбца name. 4. Если settlement != "000", в таблице kladr ищется строка вида region + zone + city + settlement + "00" в столбце code и в возвращаемую строку добавляется значение столбца name. 5. В таблице streets ищется строка вида region + zone + city + settlement + street + "00" в столбце code и в возвращаемую строку добавляется значение столбца name. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2007, 12:59 |
|
||
|
Помогите сделать функцию
|
|||
|---|---|---|---|
|
#18+
aleksandyПроблема следующая: нужна функция, которая бы формировала и возвращала строку(адрес), на основе переданной в нее строки(кода). Kladr + Street + Doma сейчас больше миллиона записей. Поэтому для своих нужд я разбил код кладра на составляющие Code_FF, Code_RRR, Code_CCC, Code_TTT, Code_SSSS, Code_DDDD ::Int2. Построил индексы и выборки теперь летают приемлемо. Одна из функций как раз заточена на возврат адреса по его коду: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2007, 15:01 |
|
||
|
Помогите сделать функцию
|
|||
|---|---|---|---|
|
#18+
Kruchinin Pahan я разбил код кладра на составляющие Code_FF, Code_RRR, Code_CCC, Code_TTT, Code_SSSS, Code_DDDD ::Int2. Построил индексы и выборки теперь летают приемлемо. Спасибо за помощь. Ещё несколько вопросов: 1. Code_FF, Code_RRR, Code_CCC, Code_TTT, Code_SSSS это как я понимаю коды областей, районов, городов, населенный пунктов, улиц соответственно, а что такое Code_DDDD, коды номеров домов? Для чего их хранить в отдельной таблице? Эти значения я храню в полях своих таблиц. 2. Немного не в тему, но все же... при создании индекса нужно указывать Access method(rtree, btree, hash, gist), что это за параметр? Как его значение влияет на работу с индексом? И в чем между ними(значениями) разница? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2007, 20:30 |
|
||
|
Помогите сделать функцию
|
|||
|---|---|---|---|
|
#18+
Kruchinin Pahan , может посоветуете какую-нибудь книжку типа plpgsql для начинающих? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2007, 20:35 |
|
||
|
Помогите сделать функцию
|
|||
|---|---|---|---|
|
#18+
aleksandy Спасибо за помощь. Ещё несколько вопросов: 1. Code_FF, Code_RRR, Code_CCC, Code_TTT, Code_SSSS это как я понимаю коды областей, районов, городов, населенный пунктов, улиц соответственно, а что такое Code_DDDD, коды номеров домов? Для чего их хранить в отдельной таблице? Эти значения я храню в полях своих таблиц. Это наследство последней версии КЛАДРа. Разработчики разделили уже на 4 таблицы. Kladr, Street, Doma, Flats Заполненную Flats я ни разу не видел (тока заголовок). Doma пока что тоже несильно заполнены, но уже есть. Фишка в этих домах в том, что одна и та же улица может иметь несколько почтовых индексов и номеров ГНИ. Опять же проблема с тем, как этот дом хранится. Пока я с ним особенно ничего не придумал. Есть только функция Adr_ParseDom. Тока она тормоз. aleksandy 2. Немного не в тему, но все же... при создании индекса нужно указывать Access method(rtree, btree, hash, gist), что это за параметр? Как его значение влияет на работу с индексом? И в чем между ними(значениями) разница? Это тип ндекса. Для Int2, Int4 я предпочитаю btree. Время поиска в таком индексе стремится к O(lg(h)), где h - высота индекса дерева. lg(h) - столько в максимуме операций чтения с диска необходимо, чтобы получить конкретный ключ. Сейчас народ предпочитает пользоваться Gist индексами (на самом деле то же красночерное дерево, только слегка модифицированное для поддержания сбалансированности дерева). Хаш, вроде лучше для текстов использовать (только на хаш индексах не определены часть операций сравнения, как на btree). А вообще, в доках по пг есть все и про индексы, и какие операции определены на этих индексах и где какой лучше использовать. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2007, 06:30 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=298&tid=2005475]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
| others: | 252ms |
| total: | 379ms |

| 0 / 0 |
