Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Перенести совпадающие поля из одной таблицы в другую / 9 сообщений из 9, страница 1 из 1
25.10.2017, 18:38
    #39541985
Sigizmund2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенести совпадающие поля из одной таблицы в другую
Здравствуйте.
Есть таблица customer, структура:

1 customer_id int(11)
2 store_id int(11)
3 firstname varchar(32)
4 lastname varchar(32)
5 avatar varchar(255)
6 email varchar(96)
7 telephone varchar(32)
8 fax varchar(32)
9 password varchar(40)
10 salt varchar(9)
11 cart text
12 wishlist text
13 newsletter tinyint(1)
14 address_id int(11)
15 customer_group_id int(11)
16 ip varchar(40)
17 status tinyint(1)
18 approved tinyint(1)
19 token varchar(255)
20 date_added datetime
21 utm text
22 lead_id int(11)
23 contact_id int(11)
24 affiliate_paid int(11)
25 affiliate_life_time date
26 affiliate_bonus_time_constant date
27 parent int(11)

и affiliate, структура:

1 affiliate_id int(11)
2 firstname varchar(32)
3 lastname varchar(32)
4 email varchar(96)
5 telephone varchar(32)
6 fax varchar(32)
7 password varchar(40)
8 salt varchar(9)
9 company varchar(32)
10 website varchar(255)
11 address_1 varchar(128)
12 address_2 varchar(128)
13 city varchar(128)
14 postcode varchar(10)
15 country_id int(11)
16 zone_id int(11)
17 code varchar(64)
18 commission decimal(4,2)
19 tax varchar(64)
20 payment varchar(64)
21 cheque varchar(100)
22 paypal varchar(64)
23 bank_name varchar(64)
24 bank_branch_number varchar(64)
25 bank_swift_code varchar(64)
26 bank_account_name varchar(64)
27 bank_account_number varchar(64)
28 ip varchar(15)
29 status tinyint(1)
30 approved tinyint(1)
31 date_added datetime
32 qiwi varchar(100)
33 card varchar(100)
34 yandex varchar(100)
35 request_payment decimal(10,2)
36 coupon int(11)
37 webmoney_wmr varchar(100)
38 webmoney_wmz varchar(100)
39 webmoney_wmu varchar(100)
40 webmoney_wme varchar(100)
41 webmoney_wmy varchar(100)
42 webmoney_wmb varchar(100)
43 webmoney_wmg varchar(100)
44 alert_pay varchar(100)
45 moneybookers varchar(100)
46 liqpay varchar(100)
47 sage_pay varchar(100)
48 two_checkout varchar(100)
49 google_wallet varchar(100)
50 parent int(11)

Мне нужно перенести данные каждого пользователя(customer) в таблицу партнёр(affiliate). Т.е. заполнить совпадающие поля, при этом если пользователь уже есть в партнёрах(абсолютно уникальное поле email), то ничего не делать. Помогите запрос составить.
...
Рейтинг: 0 / 0
25.10.2017, 22:41
    #39542068
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенести совпадающие поля из одной таблицы в другую
Sigizmund2012если пользователь уже есть в партнёрах(абсолютно уникальное поле email)Уникальные индексы в таблице партнеров на этих уникальных полях имеюся? Дефолтовые значения на отсутствующих при вставке полях заданы? Если да и да, то скопировать (не переместить!) данные можно так примерно:

INSERT IGNORE INTO `affiliate` (список полей таблицы `affiliate`, в которые вставлять данные) SELECT (соответствующий список полей таблицы `customer`с данными для вставки) FROM `customer`;

Документация: https://dev.mysql.com/doc/refman/5.7/en/insert-select.html
...
Рейтинг: 0 / 0
26.10.2017, 14:30
    #39542503
Sigizmund2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенести совпадающие поля из одной таблицы в другую
vkleУникальные индексы в таблице партнеров на этих уникальных полях имеюся?
Я имел ввиду, что e-mail уникальный у каждого пользователя, и 2-х пользователей с одинаковым email быть не может, как и партнёров, поэтому поле email уникальное. А вообще архитектурно в таблицах уникальное поле(key) это cusomer_id и affiliate_id соответственно.

Дефолтовые значения на отсутствующих при вставке полях заданы? А как это проверить через phpMyAdmin? Некоторые поля в affiliate пустые(например fax, иногда adress). Нужно именно скопировать данные, не перенести, при этом, если в affiliate уже есть партнёр с email из customer, то такого пользователя не копировать.
...
Рейтинг: 0 / 0
26.10.2017, 20:29
    #39542842
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенести совпадающие поля из одной таблицы в другую
Sigizmund20122-х пользователей с одинаковым email быть не можетЭто понятно, это Вы бизнес-логику рассказываете. А чем она обеспечена? Можно уникальный ключ задать на поле "email", можно перед регистрацией пользователя или обновлением его данных где-нить в личном кабинете проверять наличие вводимого адреса электронной почты, а можно и самого добросовестного оператора бабу Маню с 40-летним стажем "набивки" документов перед вводом данных обязать проверять по списочку в тетрадке. В какой-то мере даже и третий вариант будет работоспособным, несмотря на его странность. Однако, на уровне СУБД уникальность можно гарантировать только средствами этой самой СУБД. На уровне приложения гипотетически сгодится и второй вариант.

Sigizmund2012архитектурно в таблицах уникальное поле(key) это cusomer_id и affiliate_id соответственноЭто "для внутреннего пользования", скорее всего. К реальному пльзователю оно вряд ли имеет отношение за пределами таблицы или базы.
Но вот нужно ли копировать ID из одной таблицы в другую - сие не ясно.

Sigizmund2012А как это проверить через phpMyAdmin?Ткнуть во вкладку "Структура" таблицы и посмотреть. Не вариант? Тогда SHOW CREATE TABLE.
...
Рейтинг: 0 / 0
27.10.2017, 11:57
    #39543116
Sigizmund2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенести совпадающие поля из одной таблицы в другую
vkle,
Это понятно, это Вы бизнес-логику рассказываете. А чем она обеспечена?

Уникальность поля email проверяется php скриптом во время регистрации пользователя, не самой базой.
Но вот нужно ли копировать ID из одной таблицы в другую - сие не ясно.

Не нужно, они различаются у customer и affiliate, кроме того, стоит у обоих AUTO_INCREMENT, так, что это поле автоматически умножается на 1 при добавлении нового элемента в таблицу.
Ткнуть во вкладку "Структура" таблицы и посмотреть. Не вариант? Тогда SHOW CREATE TABLE
Почти у всех полей нет значения по умолчанию, кроме parent=0, comission=0.00, recuest_payment=0.00 и coupon=NULL.
...
Рейтинг: 0 / 0
27.10.2017, 12:30
    #39543158
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенести совпадающие поля из одной таблицы в другую
Sigizmund2012Уникальность поля email проверяется php скриптом во время регистрации пользователя, не самой базой.Ну то есть не гарантируется. А напрасно.
...
Рейтинг: 0 / 0
27.10.2017, 12:57
    #39543207
Sigizmund2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенести совпадающие поля из одной таблицы в другую
AkinaSigizmund2012Уникальность поля email проверяется php скриптом во время регистрации пользователя, не самой базой.Ну то есть не гарантируется. А напрасно.
А почему не гарантируется? Я точно не знаю, но думаю, что работает он примерно так: загружает таблицу customer и пробегает циклом по полям email, сравнивая их с введённым пользователем, если есть совпадение выдаёт ошибку. Ну или выполняет что-то типа этого:
Код: sql
1.
SELECT customer_id FROM customer WHERE email=email


разве это не гарантия уникальности?
...
Рейтинг: 0 / 0
27.10.2017, 13:26
    #39543249
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенести совпадающие поля из одной таблицы в другую
Sigizmund2012разве это не гарантия уникальности?НЕТ.

Вполне достаточно параллельного исполнения двух копий кода, каждая из которых внесёт в таблицу одну и ту же запись. И это пройдёт, ибо между циклом проверки и запросом на запись есть "зазор". И никаких ошибок не будет.
...
Рейтинг: 0 / 0
28.10.2017, 14:22
    #39543684
Sigizmund2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенести совпадающие поля из одной таблицы в другую
Мне помогут? У самого знаний MySQL не хватает.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Перенести совпадающие поля из одной таблицы в другую / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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