Перейти к содержимому


Фото
- - - - -

Как Сбросить Наличие Запросом В Бд?

сбросить наличие

  • Чтобы отвечать, сперва войдите на форум
13 ответов в теме

#1 Amarous

Amarous
  • Пользователь
  • 25 сообщений
  • Версия CMS:2.x

Опубликовано 23.01.2014 - 14:12

Как и где в файле импорта добавить строку, что бы наличие по всем товара стало равно 0?



#2 just_simao

just_simao
  • Пользователь
  • 192 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x

Опубликовано 23.01.2014 - 16:25

В БД запрос:

UPDATE `s_variants` SET `stock`=null WHERE 1



#3 Amarous

Amarous
  • Пользователь
  • 25 сообщений
  • Версия CMS:2.x

Опубликовано 23.01.2014 - 22:07

Спасибо kors и just_simao!

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

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



#4 kozhushko8

kozhushko8
  • Пользователь
  • 18 сообщений
  • Дизайн
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 01.06.2020 - 16:23

А как сформировать запрос дабы обнулить варианты товаров конкретного бренда?



#5 Kasha

Kasha

    Поддержка пользователей

  • Администратор
  • 1 711 сообщений
  • Дизайн, Программирование, Верстка, SEO
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 02.06.2020 - 01:23

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

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

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



#6 kozhushko8

kozhushko8
  • Пользователь
  • 18 сообщений
  • Дизайн
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 02.06.2020 - 09:47

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

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

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

 

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



#7 Kasha

Kasha

    Поддержка пользователей

  • Администратор
  • 1 711 сообщений
  • Дизайн, Программирование, Верстка, SEO
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 02.06.2020 - 13:22

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');

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



#8 phukortsin

phukortsin
  • Фрилансер
  • 1 108 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 04.06.2020 - 09:10

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

 

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.

 

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

 



#9 kozhushko8

kozhushko8
  • Пользователь
  • 18 сообщений
  • Дизайн
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 04.06.2020 - 10:14

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

 

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



#10 Kasha

Kasha

    Поддержка пользователей

  • Администратор
  • 1 711 сообщений
  • Дизайн, Программирование, Верстка, SEO
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 05.06.2020 - 08:55

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

 

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

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

 

 

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

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



#11 kozhushko8

kozhushko8
  • Пользователь
  • 18 сообщений
  • Дизайн
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 05.06.2020 - 09:01

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

 

 

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

 

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



#12 Kasha

Kasha

    Поддержка пользователей

  • Администратор
  • 1 711 сообщений
  • Дизайн, Программирование, Верстка, SEO
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 05.06.2020 - 12:59

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



#13 phukortsin

phukortsin
  • Фрилансер
  • 1 108 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 05.06.2020 - 13:09

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


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

 

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



#14 Kasha

Kasha

    Поддержка пользователей

  • Администратор
  • 1 711 сообщений
  • Дизайн, Программирование, Верстка, SEO
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 05.06.2020 - 14:35

спасибо за замечание, затупил.







Также с меткой «сбросить, наличие»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых