Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как обработать множество строк? / 6 сообщений из 6, страница 1 из 1
26.12.2017, 04:52
    #39575785
jtag
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обработать множество строк?
Всем добрый день. Разрабатываю проект. В таблице находятся 3000 школьников(таблица постоянно увеличивается, точнее это журнал), со всеми данными, около 15 полей. Мне нужно эти данные разнести в разные таблицы, в таблицу телефонов, в таблицу адресов и т.д. В начале я выбирал одну строку из таблицы школьников, обрабатывал ее на сервере и вставлял в разные таблицы в БД, устанавливая флаг обработано. Потом переписал весь код, делаю выборку всех строк школьников одним разом в массив. Создаю другие "временные" массивы, распределяю туда данные. Потом по этим массивам создаю длинный запрос-вставку и отправляю в бд. Все работает вроде хорошо.
Однако теперь мне нужно еще фильтровать этот массив школьников от дублирующихся данных, разных пустых ошибочных данных, и сохранять в массив ошибочных школьников. т.е. массивы динамический изменяются в длинне на сервере, и происходит какая-то имитация поведения таблиц как в реальной БД, еще мне приходится следить за автоинкрементом, увеличивая искусственно переменную в одном из массивов, чтоб потом по автоинкременту, если что сразу сделать апгрейд данных в этом массиве. Дальше еще больше. Какая-то путаница. И все это для того чтобы вставить все данные не грузя лишний раз БД. Хотел узнать, обычно действительно так обрабатывают и подготавливают массивы с данными или делают как то по другому?
...
Рейтинг: 0 / 0
26.12.2017, 08:01
    #39575812
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обработать множество строк?
jtagХотел узнать, обычно действительно так обрабатывают и подготавливают массивы с данными или делают как то по другому?Какой смысл обрабатывать ЗАПИСИ, когда разумнее обрабатывать ПОЛЯ?

Типичная последовательность выделения поля во внешнюю таблицу:

Код: sql
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.
-- Создание таблицы-словаря
CREATE TABLE vocabulary ( id SERIAL PRIMARY KEY,
                          val SOMETYPE /* NOT NULL */
                        );

-- Заполнение значениями
INSERT INTO vocabulary (val)
SELECT DISTINCT somefield 
FROM datatable;

-- Добавление поля-ссылки
ALTER TABLE datatable 
ADD COLUMN val_id BIGINT UNSIGNED;

-- Заполнение поля-ссылки
UPDATE datatable d, vocabulary v
SET d.val_id = v.id
WHERE d.somefield = v.val;

-- Установление внешней связи
ALTER TABLE datatable 
ADD FOREIGN KEY (val_id) REFERENCES vocabulary (id);

-- Удаление ненужного поля
ALTER TABLE datatable 
DROP COLUMN somefield;


Само собой на каждом этапе контролируется правильное и безошибочное его прохождение.
...
Рейтинг: 0 / 0
26.12.2017, 09:13
    #39575844
jtag
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обработать множество строк?
ужас, ща будет взрыв мозга, от слова distinct инстинкт самовыживания пропадает=). Попробую разобраться.
...
Рейтинг: 0 / 0
27.12.2017, 14:59
    #39576884
jtag
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обработать множество строк?
спасибо за выше изложенный пример. Честно сказать я сейчас нахожусь на измене, я так понял что нет смысла загружать данные на сервер, потом обрабатывать и выгружать их, лучше отправлять запросы в БД, чтобы она сама обрабатывала все данные. или так не всегда делают?
...
Рейтинг: 0 / 0
27.12.2017, 15:29
    #39576917
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обработать множество строк?
jtagя так понял что нет смысла загружать данные на сервер, потом обрабатывать и выгружать их, лучше отправлять запросы в БД, чтобы она сама обрабатывала все данные. или так не всегда делают?
Зависит от того, что надо делать с данными. Большинство задач массовой обработки разумнее выполнять на сервере БД - он специально на это заточен, и делает это намного эффективнее, да и ресурсов у него поболе будет. К тому же получить по сети компактные данные и получить пухлые исходные (которые ведь ещё и где-то держать надо!) - тоже две большие разницы.

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

Как правило, если программист решает задачу такого уровня, он уже чётко понимает, где он силён, а где программисты сервера его делают, и раскладывает задачу на этапы, каждый из которых реализуется в наиболее выгодной для этого точке.

Задача, описанная в исходном сообщении, несомненно, должна решаться на сервере - там присутствует простейшая плоская манипуляция набором данных.
...
Рейтинг: 0 / 0
27.12.2017, 21:21
    #39577136
jtag
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обработать множество строк?
спасибо за информацию
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как обработать множество строк? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]