[Решено] Помогите составить запрос для update set (IF ELSE)

Тема в разделе "Базы Данных", создана пользователем alex_storm, 4 май 2017.

Статус темы:
Закрыта.
  1. alex_storm

    alex_storm webdev Команда форума

    Регистрация:
    11 дек 2012
    Сообщения:
    1.151
    Симпатии:
    667
    Нужно произвести замену связей аттрибутов.

    Для этого я сделал запрос аля:
    Код:
    UPDATE `oc_product_attribute` SET `attribute_id` =
       CASE
           WHEN `attribute_id` = 2 THEN 9
           WHEN `attribute_id` = 9 THEN 2
           ELSE 0
       END   
    WHERE `attribute_id` = 130
    
    Я не могу понять одну вещь... Где я ошибся, что каждый раз не проходит проверка if else ? Т.е. в любому случаи пишет
    - #1062 - Duplicate entry '86981-0-1' for key 'PRIMARY'
    Ок, и это тоже думал побороть добавив условие WHEN `attribute_id` = 0 THEN 9
    Но ничего не помогает ((
     
  2. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.543
    Симпатии:
    1.465
    Ну, ваще ты же выбираешь все product_attribute у которых attribute_id = 130. Т.е. все записи с id = 130 и никаких 2 или 9
     
  3. alex_storm

    alex_storm webdev Команда форума

    Регистрация:
    11 дек 2012
    Сообщения:
    1.151
    Симпатии:
    667
    Ну правильно, я хочу заменить 130 на 2 или 9.
    Т.е. мне нужно еще дополнительно сделать выборку по 2 или 9 в case ?
     
  4. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.543
    Симпатии:
    1.465
    проблема в том, что ты выбрал только 130, там не будет никаких 2 и/или 9.

    ты выбрал все 130 и по какому принципу они должны замениться на 2 или 9? перечитай запрос.
     
  5. alex_storm

    alex_storm webdev Команда форума

    Регистрация:
    11 дек 2012
    Сообщения:
    1.151
    Симпатии:
    667
    Смотри, я ж пишу, что установи 2 или 9 для всех у кого 130.
    Тут я просто думал сделать какую то проверку, чтобы обойти прикол с primary key. Т.к. идут дубли на параметров у одного товара и хотел одним запросом сделать, что то типа:
    Выбери все у кого есть 130 и сделай замену на 2 (если не получилось или ошибка) то на 9.
     
  6. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.543
    Симпатии:
    1.465
    нет, ты выбрал все у кого 130, а потом ищешь если attribute_id = 2 то пихаем 9, и наоборот. Но все записи у тебя с id = 130. т.е. - будет всегда 0


    короче, опиши задачу нормально и сделаем тебе решение!
     
  7. alex_storm

    alex_storm webdev Команда форума

    Регистрация:
    11 дек 2012
    Сообщения:
    1.151
    Симпатии:
    667
    Сделал средствами php, вначале сделал выборку по своствам, далее сделал проверку на предмет дублей и потом уже сделал запрос на изменения.
     
Статус темы:
Закрыта.