- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
VK приобрела 70% в структуре компании-разработчика red_mad_robot
Которая участвовала в создании RuStore
Оксана Мамчуева
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Добрый день.
Есть выборка
возвращает такие данные
Как сделать запрос UPDATE чтобы присвоить значения stats.counter в profileskeys.counter исходя из возвращаемых profileskeys.id
В моем понимании сделать это одним запросом нельзя, так как надо селектить и апдейтить одновременно одну и туже таблицу.
Поэтому хочется уложиться в 2-3 запроса негромоздких(Возможно с созданием временной таблицы), так как не хочется забрасывать мускул запросами обновляя каждую строку результата новым запросом.
?
http://www.weblibrary.biz/mysql/sintaksis-oper/oper-manipul-dannymi/sintaksis-podzaprosov
Что ж ссылку то не mysql.com написали ?
Сразу надо было туда слать....
Вопрос стоит в быстром решении, а не в читании книженции по мускулу, чтобы понять и сделать через 2 недели.
по посту №2
You can't specify target table 'profileskeys' for update in FROM clause
как и ожидалось.
Думаю тут надо
делать отдельную таблицу для результата
INSERT INTO newtmpstat (counter, pid) SELECT stats.counter, profileskeys.id
FROM stats
LEFT JOIN profileskeys ON stats.keyword = profileskeys.keyname
WHERE profileskeys.id IS NOT NULL
ORDER BY stats.counter DESC , stats.keyword ASC
А потом уже
UPDATE profileskeys SET counter = newtmpstat.counter WHERE id = newtmpstat.pid
и далее чистить временную.
Есть у кого более изящное решение ?
boodda, в посте maldivec все верно. Вы, случаем, во вложенный select ничего больше не впихнули?
по посту №2
You can't specify target table 'profileskeys' for update in FROM clause
как и ожидалось.
Скорее всего вы во вложенном селекте пытаетесь выборку сделать по той же таблице, которую апдейтите. Проверьте - апдейтим 'profileskeys', а выборку делаем из 'stats'
Прошу прощения, да впихнул еще условие, но как оказалось зря)
Maldivec спасибо.
Странно что только такой запрос кушает не мало времени , около 7 секунд.
в stats 300 записей в profileskeys 161 тыс. записей.
Хотя это еще тепличный случай во время тестирования, реальные кол-во записей в stats будет несколько десятков тысяч.
Тяжёленький запрос....
Есть ли методы оптимизации в данном случае, при условии что индексы есть ?
И собственно последний вопрос, как удалить из stats те записи Counter от которых обновился в profileskeys ?
Потому что у вас
stats.keyword = profileskeys.keyname
скорее всего это varchar, индексы попробуйте добавить :) или сравнивайте по ключевым полям как-то... но это больше вопрос к проектировщику БД
И собственно последний вопрос, как удалить из stats те записи Counter от которых обновился в profileskeys ?