Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Спасибо kors и just_simao!

Буду пользоваться пока так.

Однако можно ли как-то добавить эту строку в import.php? чтоб каждый раз не влазить в phpmyadmin...

Ссылка на сообщение
Поделиться на другие сайты
  • 6 лет спустя...

Если не ошибаюсь что-то вроде

UPDATE `s_variants` v LEFT JOIN `s_products` p ON p.id = v.product_id SET `stock`=0 WHERE p.brand_id = айди_бренда

Айди бренда можете посмотреть в админке

Ссылка на сообщение
Поделиться на другие сайты

Если не ошибаюсь что-то вроде

UPDATE `s_variants` v LEFT JOIN `s_products` p ON p.id = v.product_id SET `stock`=0 WHERE p.brand_id = айди_бренда

Айди бренда можете посмотреть в админке

 

Спасибо за помощь! Правда у меня задача чуть сложнее. Написал парсер XML, хочу ПОПРОБОВАТЬ перед импортом пройтись по файлу и собрать все уникальные бренды, которые присутствуют в файле, и обнулить варианты товаров тех брендов которые ранее получил. То есть в ходе запроса нужно получить их id по названиям.

Ссылка на сообщение
Поделиться на другие сайты
UPDATE `s_variants` v 
LEFT JOIN `s_products` p ON p.id = v.product_id 
LEFT JOIN `s_brands` b ON p.brand_id = b.id 
SET `stock`=0
WHERE b.name IN ('название бренда 1', 'название бренда 2');

Правда не уверен что такая конструкция вообще может работать

Ссылка на сообщение
Поделиться на другие сайты

Так работает:

 

UPDATE `s_variants` v
LEFT JOIN `s_products` p ON p.id = v.product_id
LEFT JOIN `s_brands` b ON p.brand_id = b.id
SET `stock`=0
WHERE b.name IN ('Nokia', 'Dyson');


Подобные задачи решаю обычно так:

1. Завожу новое поле mark в таблице вариантов (или товаров или брендов),

2. Перед началом обработки обнуляю его UPDATE ... SET mark=0,

3. В процессе при обработке отдельного элемента у соответствующего товара ставлю отметку mark=1,

4. В конце уже делаю запрос  UPDATE  ... SET stock=0 WHERE ... mark=0.

 

Создание нового поля - маленький недостаток. Но в плюсе - экономия на повторном парсинге файла.

 

Ссылка на сообщение
Поделиться на другие сайты

В случае с id работает такой запрос (может кому пригодится)

 

$this->db->query('UPDATE __variants SET stock = 0 WHERE product_id IN (SELECT id FROM __products WHERE brand_id IN (1, 2, 3))');

Ссылка на сообщение
Поделиться на другие сайты

В случае с id работает такой запрос (может кому пригодится)

 

$this->db->query('UPDATE __variants SET stock = 0 WHERE product_id IN (SELECT id FROM __products WHERE brand_id IN (1, 2, 3))');

а в чем принципиальное отличие от моего решения?)))

 

 

Так работает: 

Благодарю за замечание.

Ссылка на сообщение
Поделиться на другие сайты

а в чем принципиальное отличие от моего решения?)))

 

 

Благодарю за замечание.

 

Ваше не работает, ругается на синтаксис...

Ссылка на сообщение
Поделиться на другие сайты

Попробуйте скопировать поточнее )

 

Если "скопировать поточнее", то есть скопировать то, что исправлено позднее, то синтаксической ошибки нет,  запрос отрабатывает, но не дает нужного результата (что бы наличие по всем товарам стало равно 0)...

 

Предлагаемое SET `stock`=null  - не соответствует  наличию 0, надо stock=0, как в более поздних постах.

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...