Перейти к содержанию

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

1) Скопировать значения с одной таблицы в другую  

UPDATE tab_name_1 tn1 
  SET item_tab_1_name  = ( SELECT item_tab_2_name FROM tab_name_2 tn2 
                            WHERE tn2.item_tab_2_name = tn1.item_tab_1_name );

Поделиться сообщением


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

а как скопировать все товары из магазина с store_id=1 в store_id=2? Т.е. всем товарам назначить кроме store_id=1, также store_id=2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, Gann сказал:

а как скопировать все товары из магазина с store_id=1 в store_id=2? Т.е. всем товарам назначить кроме store_id=1, также store_id=2

INSERT IGNORE INTO oc_product_to_store (product_id,store_id) SELECT product_id,2 FROM oc_product_to_store WHERE store_id=1

Префикс при необходимости измените на свой

Изменено пользователем Proloxy
  • +1 1

Поделиться сообщением


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

Хм, а по поводу

В 13.12.2016 в 23:34, ArtemPitov сказал:

1) Скопировать значения с одной таблицы в другую  

  1. UPDATE tab_name_1 tn1
  2. SET item_tab_1_name = ( SELECT item_tab_2_name FROM tab_name_2 tn2
  3. WHERE tn2.item_tab_2_name = tn1.item_tab_1_name );

По логике запроса получается следующее - в поле name таблицы 1 записать значение поля name из таблицы 2, при этом прописана связка по равенству этих полей. Т.е. при наличии одинаковых значений поля name ничего не обновляем, а при отсутствии в таблице 2 записи с полем name, равным значению поля name текущей записи из таблицы 1 - значение поля name в таблице 1 обнуляем... Довольно странная логика... И казалось бы - причём тут "Скопировать значения с одной таблицы в другую"....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 13.12.2016 в 17:34, ArtemPitov сказал:

1) Скопировать значения с одной таблицы в другую  



 
  1. UPDATE tab_name_1 tn1
  2. SET item_tab_1_name = ( SELECT item_tab_2_name FROM tab_name_2 tn2
  3. WHERE tn2.item_tab_2_name = tn1.item_tab_1_name );

ХМ

Я бы посмотрел в сторону JOIN

 

UPDATE tab_name_1 tn1
JOIN tab_name_2 tn2 ON (tn2.item_tab_2_name = tn1.item_tab_1_name )
SET tn1.item_tab_1_name = tn2.item_tab_2_name;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, Gann сказал:

а как скопировать все товары из магазина с store_id=1 в store_id=2? Т.е. всем товарам назначить кроме store_id=1, также store_id=2

REPLACE oc_rproduct_to_store (product_id, store_id) SELECT product_id, 2 FROM oc_product

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 минут назад, chukcha сказал:

REPLACE oc_rproduct_to_store (product_id, store_id) SELECT product_id, 2 FROM oc_product

 

REPLACE `oc_product_to_store` (product_id, store_id) SELECT product_id, 2 FROM oc_product

 

хм, работает!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, chukcha сказал:

UPDATE tab_name_1 tn1 JOIN tab_name_2 tn2 ON (tn2.item_tab_2_name = tn1.item_tab_1_name ) SET tn1.item_tab_1_name = tn2.item_tab_2_name;

В итоге запрос-то что должен сделать? Есть две таблицы, ищем совпадения по name и ... Не меняем ничего, так как они и так по условию отбора равны...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
7 минут назад, Proloxy сказал:

В итоге запрос-то что должен сделать? Есть две таблицы, ищем совпадения по name и ... Не меняем ничего, так как они и так по условию отбора равны...

Да, тут я лажанулся

Не верно связав таблицы,

Но я писал на базе первого запроса от ТС

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 минут назад, chukcha сказал:

Но я писал на базе первого запроса от ТС

Ну да, запрос повторяет логику запроса ТС, я просто смысла самого запроса не понимаю %)

Изменено пользователем Proloxy

Поделиться сообщением


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

Вам нужно скопировать (сделать все одинаковые языковые значения

 


UPDATE `newtable` t1
JOIN (SELECT * FROM newtable WHERE `l_id` =1) t2 
ON (t1.`p_id` = t2.`p_id` AND t1.`a_id`=t2.`a_id`)
SET t1.`text` = t2.`text`

l_id - языковый индекс

 

Поделиться сообщением


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

Бывает задача когда вы импортировали из прайс-листа продукты с категориями.  И если вы это делали буржуйскими средствами (модулями) импорта, которые рассчитаны на чистый opencart, то у вас не будет для товаров указаны главные категории. А они нужны для ocstore.

 

Поэтому можно автоматически каждому товару назначить главную категорию исходя из того, что главной будет, условно говоря, первая категория из всех категорий, к которым привязан продукт.

 

UPDATE product_to_category AS prod1 INNER JOIN (SELECT * FROM `product_to_category` group by `product_id`) AS prod2 ON prod1.product_id = prod2.product_id AND  prod1.category_id = prod2.category_id SET prod1.main_category=1;

Предполагается, что вы импортировали товары в БД без товаров и (после импорта) для всех товаров отсутствует главная категория, т. е. имеет место:

 

main_category=0

 

Если же у каких-то товаров уже главные категории назначены и вам не принципиально какая именно будет главной у определенного товара, то для того чтобы одному товару не было назначено сразу несколько главных, можно просто обнулить "главную категорию" для всех товаров перед запросом SQL, показанном выше. Т. е. сделать сперва следующее:

 

update `product_to_category` set main_category=0;

 

Мне при импорте этого было достаточно.  Пользовался бесплатным модулем с opencart.com.  В нем не хватило именно возможности выставить "главные".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
DELETE oc_country,oc_zone FROM oc_country 
LEFT JOIN oc_zone ON oc_country.country_id = oc_zone.country_id
WHERE oc_country.country_id <> 109

C помощью данного запроса удаляем с базы ненужные страны вместе с регионом. Данный запрос удаляет все страны кроме Казахстана

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Update oc_category c SET c.status = 0 where 0 = (select count(*) from oc_product_to_category pc WHERE pc.category_id = c.category_id)

Отключаем все категории в которых нет товаров

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 19.01.2018 в 11:30, magzhan9292 сказал:

Update oc_category c SET c.status = 0 where 0 = (select count(*) from oc_product_to_category pc WHERE pc.category_id = c.category_id)

Отключаем все категории в которых нет товаров

Что за бред, какой selet count = 0

 

Что вам мешает сделать WHERE NOT IN (SELECT product_id ....

SQL  - это же не ООП  - это язык описания множеств. Мыслите другой парадигмой!

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
9 hours ago, snastik said:

Что за бред, какой selet count = 0

 

Что вам мешает сделать WHERE NOT IN (SELECT product_id ....

SQL  - это же не ООП  - это язык описания множеств. Мыслите другой парадигмой!

Согласен с вами, предложу свой вариант который быстрее

UPDATE `oc_category` c 
LEFT JOIN `oc_product_to_category` pc ON c.category_id = pc.category_id
SET c.`status` = 0
WHERE pc.product_id IS NULL

 

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.