Обновление данных для пересекающихся user id в двух таблицах

Статус
В этой теме нельзя размещать новые ответы.

petrovich123

Постоялец
Регистрация
21 Фев 2013
Сообщения
52
Реакции
5
А не подскажете мне тоже с запросом.
Есть две таблицы с клиентами.

Таблица user_profiles

user_id | profile_key | profile_value

1 | profile.dob | “”
1 | profile.phone | “”
2 | profile.dob | “”
2 | profile.phone | “+0971111111”



Таблица userinfos

userinfo_id | user_id | phone_1

1 | 1 | +0972222222
2 | 2 |
3 | 3 |


Нужно: если в таблице user_profiles у пользователя №2 есть телефон (profile_key=profile.phone и profile_value=номеру телефону), а в таблице userinfos у этого пользователя не указан телефон, тогда в таблицу userinfos в поле phone_1 заносим телефон из таблицы user_profiles.

И наоборот: если в таблице userinfos есть телефон, а в user_profiles нет (клиент № 1) – тогда в таблицу user_profiles копируем из таблицы userinfos (поля phone_1) телефон.

Если телефон для пользователя указан в двух таблицах – пропускаем пользователя
 
Не ужели ни кто не может помочь?
 
petrovich123, ну это конечно можно сделать на SQL, но уж больно лень такое писать.
Сделай парсер на том же PHP или какой язык знаешь... это же разовая задача...

На а если надо постоянно актуализировать - пиши триггер... Если добавлено в 1 таблицу - сделать апдейт во вторую...
 
Есть две таблицы с клиентами.
Если телефон для пользователя указан в двух таблицах – пропускаем пользователя
Так а зачем тебе 2 таблицы с дублирующимися данными? Какие индексы стоят на полях?

Не ужели ни кто не может помочь?
Данных слишком мало.

Все user_id есть и в первой и во второй таблице? И надо только обновить существующих или инсёртить, если в одной таблице есть, а во второй нет?


petrovich123, ну это конечно можно сделать на SQL, но уж больно лень такое писать.
Сделай парсер на том же PHP или какой язык знаешь... это же разовая задача...

На а если надо постоянно актуализировать - пиши триггер... Если добавлено в 1 таблицу - сделать апдейт во вторую...
Да по идее там написать select с джойном и потом в зависимости от требований модифицировать его в insert into ... select ... join либо в update ... join. Получится 2 запроса с различием в where.
 
На мой взгляд вам легче будет написать php скрипт. Сейчас составить не смогу.. на ночь глядя мозги в отключке. Делайте select из БД. Далее используя конструкция if + цикл составляете запрос на Апдейт в БД.
 
Не надо тут никакой php/ruby или любой другой язык.
Код:
DROP PROCEDURE IF EXISTS updatePhone;

CREATE PROCEDURE updatePhone()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE uID INT;
    DECLARE uPF VARCHAR(255);
    DECLARE uIF VARCHAR(255);
    DECLARE cur1 CURSOR FOR (SELECT u.id, u.profile_value, ui. phone_1 FROM user AS u INNER JOIN userinfos AS ui ON (u.id = ui.user_id) WHERE u.profile_key = 'profile.phone');
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN cur1;

    read_loop: LOOP
        FETCH cur1 INTO uID, uPF, uIF;

        IF done THEN
          LEAVE read_loop;
        END IF;

        IF (uPF <> '' OR uPF IS NOT NULL) AND (uIF = '' OR uIF IS NULL) THEN
            UPDATE userinfos SET phone_1 = uPF WHERE user_id = uID;
        END IF;
    END LOOP;
    CLOSE cur1;
END;

CALL updatePhone();

DROP PROCEDURE updatePhone;
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху