- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Добрый день.
Есть выборка
возвращает такие данные
Как сделать запрос 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 ?