- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
запрос такой:
Этот запрос обновляет цену в таблице товаров, по данным из таблицы цен.
Но когда в таблице цен, для одного товара есть несколько вариантов, разных, то нужно, чтобы была выбрана наибольшая цена.
Т.е. надо
но куда вставить эту сортировку не пойму вообще, и можно ли так.
А не проще создавать временную таблицу и туда выкидывать уникальные записи с максимальной ценой и по ней менять уже основную таблицу?
В конце UPDATE и вставить. Только добавить LIMIT 1, что бы только одна запись обновлена.
Т.е. в общей сложности "order by price desc limit 1" .
Правда не уверен, что на всех версиях mysql это сработает. Вообще так лучше не делать, а выбрать сначала запись а потом ее уже и обновить.
да .. задачка ..
для записей tCode = 'base'
UPDATE shop_list as sl LEFT JOIN ( SELECT Prices.nCode, MAX( Prices.price ) `max_price` FROM Prices WHERE Prices.tCode='base' GROUP BY Prices.nCode ) AS pr ON sl.icode=pr.nCode SET sl.price=pr.max_price where pr.max_price is NOT NULL;
или для всех если убрать:
запрос такой:
Этот запрос обновляет цену в таблице товаров, по данным из таблицы цен.
Но когда в таблице цен, для одного товара есть несколько вариантов, разных, то нужно, чтобы была выбрана наибольшая цена.
Т.е. надо
но куда вставить эту сортировку не пойму вообще, и можно ли так.
Мы бы попробовали примерно так
p.s.: Подразумевая что у каждого товара есть хотя бы одна цена в таблице прайса, иначе еще надо добавить проверку на наличие цены.
Мы бы попробовали примерно так
Или я что-то не понимаю или эта запись выдаст syntax error ( по нескольким причинам ), но даже если бы сработала, все записи в shop_list стали бы одной величиной.
Или я что-то не понимаю или эта запись выдаст syntax error ( по нескольким причинам )
Только по одной, мы забыли указать таблицу Prices:)
Надо не
select max(Prices.price)
а
select max(Prices.price) from Prices
но даже если бы сработала, все записи в shop_list стали бы одной величиной.
Не-а. Условие внутри отрабатывает.
Единственный нюанс, это что занулит цены в shop_list в случае если нет значений в Prices, но тут трудно сказать баг это или фича, да и добавить условие несложно.
Спасибо всем, опробую варианты :)
Возвращаюсь к своему вопросу:
UPDATE `shop_list` as `sl` LEFT JOIN `Prices` as `pr` ON `sl`.`icode`=`pr`.`nCode` SET `sl`.`price_mag`=`pr`.`price` where `pr`.`tCode`='base' ORDER BY `pr`.`price` LIMIT 1
Не работает:
Запрос выполняется. У меня записей 40000+в shop_list и 118000+ в Prices. Пишет обновлено 180 записей. Нужную задачу не выполняет.
update shop_list set shop_list.price= (
select max(Prices.price) from Prices where shop_list.icode=Prices.nCode and Prices.tCode='base'
)
Может быть и работает, но mysql сервер просто умирает :(