За последние 24 часа нас посетили 17460 программистов и 1722 робота. Сейчас ищут 952 программиста ...

Сравнить две таблицы и обновить поле

Тема в разделе "PHP и базы данных", создана пользователем viphost, 12 сен 2011.

  1. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    Всем привет, столкнулся с проблемой которую никак решить не могу

    Есть две таблицы

    Первая таблица
    t1
    lok | mot

    Вторая таблица
    t2
    on | key | key2

    Если mot больше 100 то нужно обновить поле t2.on и переписать его на 0

    Запрос формирую так
    [sql]update t1,t2 set t2.`on`=0 where t1.lok=t2.`key` and t1.lok=t2.key2 and t1.mot>100;[/sql]

    Т.е. сравниваю поля t2.key и t2.key2 с t1.lok и если t1.mot больше 100, то перезаписываем поле t2.on на 0

    Но так не работает =(

    Если сделать так
    Первая таблица
    [sql]update t1,t2 set t2.`on`=0 where t1.lok=t2.`key` and t1.lok=t2.key2 or t1.mot>100;[/sql]

    то перезаписываются все имеющиеся поля t2.on

    Как сделать так чтобы если именно у определенного t2.id с t1.lok=t2.`key` and t1.lok=t2.key2 и если t1.mot больше 100 то перезаписывалась именно та запись, которую необходимо перезаписать, а не все подряд.
     
  2. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Попробуй
    [sql]UPDATE t2 INNER JOIN t1 ON t1.lok = t2.`key`set t2.on = 0 WHERE t1.mot > 100[/sql]
     
  3. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    так работает но на половину =)
    Мне нужно чтобы и t2.`key` и t2.`key2` сравнивала
    т.е. сейчас получается что сравнивает только t2.`key`
     
  4. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    [sql]WHERE t1.`key`= t1.`key2` AND t1.mot > 100[/sql]
     
  5. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    а так не работает =(

    t1.`key`
    t1.`key2`
    это разные значения
    t1.`key` = t2.mot
    t1.`key2` = t2.mot
     
  6. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    Вот так работает
    [sql]UPDATE t2 INNER JOIN t1 ON t1.lok = t2.`key` or 1.lok = t2.`key2` set t2.on = 0 WHERE t1.mot > 100[/sql]