Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение и изменение данных из бд 
V
    Опции темы
Just123
Дата 18.2.2010, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 9.12.2007
Где: localhost

Репутация: нет
Всего: нет



Всем привет,помогите пожалуйста решить поставленную  задачу:


В базе данных есть номера(~900 штук) телефонов в таком виде:
Код

4537768
4958789999
3215432
и т.д.


Требуется приписать к номерами код(495 или 499), если он отсутствует и если номера изменились, обновить их.
Номера есть на сайте МГТС и в EXEL файле в следующем виде:
Код

[старый код]        [старый номер]     [новый код]    [новый номер]
   495               123-хх-хх             499           647-хх-хх
   495               111-хх-хх             499           673-хх-хх
   495               432-21-хх             499           632-хх-хх


Еще это всё можно конечно сохранить в CSV или занести в БД.

Ну и главное, вопрос, как лучше всего решить данную задачу? Очень нужны советы. Спасибо.

Это сообщение отредактировал(а) Just123 - 18.2.2010, 09:42
PM MAIL   Вверх
Just123
Дата 18.2.2010, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 9.12.2007
Где: localhost

Репутация: нет
Всего: нет



Мне советовали создать массив, типа такого:
$array_phone['старый код']['старый номер'] = "новый код + новый номер";

Проверять ключи и корректировать старый номер, если ключи совпали, но что-то не подсказывает, что это решение не очень как-то. 
PM MAIL   Вверх
skyboy
Дата 18.2.2010, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(Just123 @  18.2.2010,  08:24 Найти цитируемый пост)
В базе данных

SQLite? Oracle? FoxPro?
Цитата(Just123 @  18.2.2010,  08:24 Найти цитируемый пост)
 в таком виде

приведение структуры БД - нарушение коммерческой тайны?
Цитата(Just123 @  18.2.2010,  08:24 Найти цитируемый пост)
Ну и главное, вопрос, как лучше всего решить данную задачу?

задачу обновления данных в БД в соответствие с данными в CSV лучше всего решить следующей последовательностью действий:
варианта три:
1. из данных в CSV сделать временную таблицу. одним запросом с объединением первой и второй таблицы произвести обновление.
2. сделать поиск/замену прямо в CSV файле, чтоб каждая строка с данными стала корректным UPDATE запросом  на SQL
3. пройтись средствами РНР по каждой строке CSV, совершая соответствующие обновления в БД(зависит от количества записей в файле, но потенциально это намного медленнее, чем первые два варианта).
давай, так: приведни на основании строки
Цитата(Just123 @  18.2.2010,  08:24 Найти цитируемый пост)
   495               123-хх-хх             499           647-хх-хх

какой должен быть UPDATE запрос, чтоб обновить именно указанный телефон.

Добавлено через 5 минут и 16 секунд
Цитата(Just123 @  18.2.2010,  08:24 Найти цитируемый пост)
Требуется приписать к номерами код(495 или 499), если он отсутствует

а как выглядит телефон, без кода? а с кодом?
и главное: возможна ли ситуация, когда в БД телефон без кода(например, 123-45-67), а в файле - две записи:
Цитата

495 123-45-67 499 123-45-67
499 123-45-67 495 123-45-67

какой телефон должен остаться в БД?
и что делать с телефонами БД, у которых не был указан код и которые не будут указаны в файле? удалять их?
мне вообще кажется, что это сервисная операция по чистке данных какой-то телефонной БД, для исправления некорректных номеров. и операция будет выполнена только один раз и потому производительность не критична. верно?
Цитата(Just123 @  18.2.2010,  08:40 Найти цитируемый пост)
Мне советовали создать массив, типа такого:$array_phone['старый код']['старый номер'] = "новый код + новый номер";

в смысле, корректировать в памяти? если не считать того, что, по твоим слова, "старый код" у телефона в БД может быть не задан, то и такой вариант имеет право на жизнь.
PM MAIL   Вверх
Just123
Дата 18.2.2010, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 9.12.2007
Где: localhost

Репутация: нет
Всего: нет



Цитата

SQLite? Oracle? FoxPro?

MySQL

Цитата

приведение структуры БД - нарушение коммерческой тайны?


Нет, структура выглядит следующим образом:
Код

adress | tel | code1 | code2 | fio | type | vvv | xxx | bbb | nnn | mmm


code1 и code2 для каждой записи уникальные.

Цитата

какой должен быть UPDATE запрос, чтоб обновить именно указанный телефон.


Код

UPDATE `xsl` SET `tel` = '$new' WHERE `sss` = '$code1

Где, $new это новый номер, а $code1 уникальный идентификатор.
Это при условии, что  все остальные манипуляции делает php. (Поиск, сравнение и т.д.)

P.S. Спасибо, что откликнулись.

Добавлено @ 10:06
Цитата

а как выглядит телефон, без кода?


1112233
Цитата

а с кодом?

4951112233

Цитата

возможна ли ситуация, когда в БД телефон без кода(например, 123-45-67), а в файле - две записи:

Нет, не возможна.

Цитата

и что делать с телефонами БД, у которых не был указан код и которые не будут указаны в файле? удалять их?

Удалять не нужно, нужно дописать код 495.

Цитата

мне вообще кажется, что это сервисная операция по чистке данных какой-то телефонной БД, для исправления некорректных номеров. и операция будет выполнена только один раз и потому производительность не критична. верно?

Всё верно.

Цитата

в смысле, корректировать в памяти? если не считать того, что, по твоим слова, "старый код" у телефона в БД может быть не задан, то и такой вариант имеет право на жизнь.

Да, дело в том, что старый код может быть только 495, поэтому если в телефоне не указан код,  можно подставить его и проверить старый номер на наличие, если присутствует,  исправить его, если нет, просто подставить 495.

$array_phone['495']['старый номер'] = "499 новый номер";

Это сообщение отредактировал(а) Just123 - 18.2.2010, 10:07
PM MAIL   Вверх
skyboy
Дата 18.2.2010, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(Just123 @  18.2.2010,  08:58 Найти цитируемый пост)
Удалять не нужно, нужно дописать код 495.

значит, начать с того, что дописать "495" к телефонным номерам  длиной в 7 символов.
после чего, убедиться, что в базе данных нет телефонов длиной, отличной от 10 символов.
Цитата(Just123 @  18.2.2010,  08:58 Найти цитируемый пост)
code1 и code2 для каждой записи уникальные.

они тоже есть в CSV файле?
PM MAIL   Вверх
Just123
Дата 18.2.2010, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 9.12.2007
Где: localhost

Репутация: нет
Всего: нет



Цитата

они тоже есть в CSV файле?


Нет, в CSV только (старый код) (старый номер) (новый код) (новый номер)

Добавлено @ 10:18
Цитата

значит, начать с того, что дописать "495" к телефонным номерам  длиной в 7 символов.
после чего, убедиться, что в базе данных нет телефонов длиной, отличной от 10 символов.

Ой, извините, я немного ошибся, у некоторых телефонов, старый код = 499. У 10 телефонов, если точнее.
А у некоторых телефонов, новый код == 495.

Добавлено через 5 минут и 47 секунд
На сайте МГТС, есть еще форма поиска, с помощью которой введя первые 3 символа старого номера, можно узнать новый номер. Может как-то с помощью неё сделать? Я правда, не представляю как именно.

Это сообщение отредактировал(а) Just123 - 18.2.2010, 10:20
PM MAIL   Вверх
Fortop
Дата 18.2.2010, 10:30 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(Just123 @  18.2.2010,  09:17 Найти цитируемый пост)
Может как-то с помощью неё сделать? Я правда, не представляю как именно.

Посадить девочку, которая вручную пробьет всю базу.
900 номеров можно уложиться в 1-2 дня.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Just123
Дата 18.2.2010, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 9.12.2007
Где: localhost

Репутация: нет
Всего: нет



Всё, теперь у всех номеров присутствует код, осталось только проверить, не изменился ли сам номер.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0831 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.