За последние 24 часа нас посетили 18605 программистов и 1657 роботов. Сейчас ищут 896 программистов ...

UPDATE с SELECT из одной таблицы

Тема в разделе "MySQL", создана пользователем admyx, 5 окт 2009.

  1. admyx

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

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Так. Какая-то неведомая херня.
    Может, конечно, от недосыпа, но не знаю.

    Поле sort - int(11)
    [sql]UPDATE table
    SET sort = (SELECT MAX(sort) + 1)
    WHERE id = 12[/sql]

    Устанавливает sort = NULL
    Эмммм...

    Задача - одним запросом установить максимальное значение поля sort и увеличить его на 1.
    Что я делаю не так???....
    Такой запрос вообще возможен?
     
  2. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    в подзапросе разве ФРОМ ненужно ?
    а экранировать поля ? а то вдруг есть функция сорт ?
     
  3. admyx

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

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Если сделать
    SELECT MAX(sort) FROM table
    mysql отвечает, что искомая таблица уже упоминалась в запросе, и не нужно её еще раз указывать.

    Экранировать тоже пробовал - не помогает.
     
  4. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    для нормального использования подзапросов - надо обязательно таблицам указывать синонимы ...

    кавычить поля - все таки очень желательно - обычно много головной болт снимает
     
  5. admyx

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

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Хорошо. Сможешь привести пример в контексте данной темы?
     
  6. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    [sql]UPDATE `temp_table` SET
    `sort` = (SELECT ms FROM (SELECT MAX(`sort`)+1 as ms FROM `temp_table`) AS _t)
    WHERE `ID` = 12[/sql]

    беру свои слова обратно именование алиясов работает только для подзапросов в запросах .. а не в апдейтах

    П.С. то что привел выше в данном сообщение по-идее работает
     
  7. admyx

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

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Fuck.
    nimistar, не работает.
    Я в трансе.
     
  8. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Все работает.
     
  9. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    admyx - давай криэйт сюда + заполнение
    и код который используешь полностью .. попробую повторить

    П,С, : незабудь указать версию сервера
     
  10. admyx

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

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    nimistar
    Так. Из кода работает. Уже хорошо.
    phpMyAdmin идет на хрен.

    Всем спасибо за помощь.
     
  11. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
  12. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    Simpliest +1 ... а если не локалный сервер .. то наверняка ссх есть и тогда путти умеет порт мапить ;-) (очень понравилось это решение )
     
  13. admyx

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

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Simpliest
    Да знаю я, знаю.
    Просто хостинг infobox)) А их "гениальная" настройка серверов скоро станет притчей во языцех.