Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

SQL запрос - нужна помощь


Denyelle

Recommended Posts

Добрый день.

 

Задача: на основании атрибута делать новый атрибут.

 

Пример: 

Есть готовый атрибут: Процессор - Intel Celeron N3350 1.1ГГц

Нужно сделать новый атрибут: Процессор (тип) - Celeron

 

Сделал вот такой запрос:

INSERT INTO `tablename`.`oc_product_attribute` (`product_id`, `attribute_id`, `language_id`, `text`, `crc`) VALUES ('1003190', '11421', '1', 'Celeron', '0');

 

В чем нужна помощь?

 

Сделать для одного товара - не проблема. Нужно сделать для всех товаров в этой категории. Или вообще для всех товаров, у которых есть атрибут Процессор.

 

Полное Условие звучит так: Если у товара атрибут "Процессор" содержит слово Celeron то нужно добавить к этому товару новый атрибут  "Процессор (тип)" со значением "Celeron".

 

Про добавление условия знаю как сделать - в конце добавляем WHERE `attribute_id` = 702 AND `text` LIKE '%Celeron%'

 

Кажется что должно быть вот так:

 

INSERT INTO `tablename`.`oc_product_attribute` (`product_id`, `attribute_id`, `language_id`, `text`, `crc`) VALUES ('product_id', '11421', '1', 'Celeron', '0') WHERE `attribute_id` = 702 AND `text` LIKE '%Celeron%'

 

Но не срабатывает. Главная проблема, как в значение VALUES сделать так чтобы он вставлял product_id.

 

Сможете подсказать?

 

Спасибо.

 

Надіслати
Поділитися на інших сайтах


30 минут назад, dexion сказал:

@Denyelle не проще экспорт/импорт и в экселе подправить формулами?

Долгая история.

Охота более быстрый инструмент.

Когда более 500 000 товаров, то и эксель работает не быстро.

Надіслати
Поділитися на інших сайтах


@Denyelle  Попробуйте как то так:

INSERT INTO oc_product_attribute SELECT pa.product_id, '11421', pa.language_id, 'Celeron', '0' FROM oc_product_attribute pa WHERE pa.attribute_id = 702 AND pa.text LIKE "%Celeron%"

Предварительно бэкапните табл product_attribute

Надіслати
Поділитися на інших сайтах

5 минут назад, dexion сказал:

@Denyelle  Попробуйте как то так:

INSERT INTO product_attribute SELECT pa.product_id, '11421', pa.language_id, 'Celeron', '0' FROM product_attribute pa WHERE pa.attribute_id = 702 AND pa.text LIKE "%Celeron%"

Предварительно бэкапните табл product_attribute

спасибо за пример.

Но тут он добавляет к одному товару, а мне надо ко всем товарам у которых выполняются условия. Если я правильно запрос понял.

Надіслати
Поділитися на інших сайтах


9 минут назад, Denyelle сказал:

Но тут он добавляет к одному товару, а мне надо ко всем товарам у которых выполняются условия. Если я правильно запрос понял.

Нет, должен найти все товары и к ним добавить новый атрибут

Надіслати
Поділитися на інших сайтах

Нужно создать временную таблицу товаров попадающих под условие
А потом из нее взять product_id и привязать

 

Приблизительно так...


SELECT product_id, нужные поля FROM product p JOIN product_attribute pa
WHERE  pa.text LIKE 'ваш параметр'  and pa.language_id = 'ваш язык'

 

 

 

Надіслати
Поділитися на інших сайтах

1 час назад, Denyelle сказал:

Пример: 

Есть готовый атрибут: Процессор - Intel Celeron N3350 1.1ГГц

Нужно сделать новый атрибут: Процессор (тип) - Celeron

 

здесь нужно делать двумя запросами, чтоб не идти по кругу (чтоб не зациклить) -

первый - достаем нужные данные, а вторым добавляем новый:

$query = $this->db->query("SELECT * FROM `tablename`.`oc_product_attribute` WHERE `text` LIKE '%Celeron%'");
foreach($query->rows as $val) {
	$this->db->query("INSERT INTO `tablename`.`oc_product_attribute` (`product_id`, `attribute_id`, `language_id`, `text`, `crc`) VALUES (".$val['product_id'].", ".$val['attribute_id'].", ".$val['language_id'].", 'Celeron', '0')");
}

 

 

Надіслати
Поділитися на інших сайтах

3 часа назад, vier сказал:

 

здесь нужно делать двумя запросами, чтоб не идти по кругу (чтоб не зациклить) -

первый - достаем нужные данные, а вторым добавляем новый:


$query = $this->db->query("SELECT * FROM `tablename`.`oc_product_attribute` WHERE `text` LIKE '%Celeron%'");
foreach($query->rows as $val) {
	$this->db->query("INSERT INTO `tablename`.`oc_product_attribute` (`product_id`, `attribute_id`, `language_id`, `text`, `crc`) VALUES (".$val['product_id'].", ".$val['attribute_id'].", ".$val['language_id'].", 'Celeron', '0')");
}

 

 

Попробовал так сделать - https://yadi.sk/i/0xxpDmL-7820qw

Выдает ошибку - https://yadi.sk/i/H2ycjU6puXlshQ

Надіслати
Поділитися на інших сайтах


4 минуты назад, Denyelle сказал:

Попробовал так сделать - https://yadi.sk/i/0xxpDmL-7820qw

Выдает ошибку - https://yadi.sk/i/H2ycjU6puXlshQ

так Вы синтаксические ошибки в запросе наделали. - кто же их такие запросы создает, включая синтаксис php

я Вам показал полностью, как можно сделать, но я так понял, Вы даже с php, мягко сказать, плохо знакомы.

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

Надіслати
Поділитися на інших сайтах

1 минуту назад, vier сказал:

так Вы синтаксические ошибки в запросе наделали. - кто же их такие запросы создает, включая синтаксис php

я Вам показал полностью, как можно сделать, но я так понял, Вы даже с php, мягко сказать, плохо знакомы.

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

так я делаю запрос просто в БД и потом уже перевожу в файл php.

И даже в phpmyadmin выдает ошибку.

 

Как ваш запрос выглядит в phpmyadmin?

Надіслати
Поділитися на інших сайтах


12 минут назад, Denyelle сказал:

Как ваш запрос выглядит в phpmyadmin?

 

так то, что я в примере приводил не для phpmyadmin, а для php - там же переменные и другие конструкции.

и я не вводил его, а написал пример, как можно решить.

сорри - времени нет на ликбез.

Надіслати
Поділитися на інших сайтах

6 часов назад, Denyelle сказал:

Полное Условие звучит так: Если у товара атрибут "Процессор" содержит слово Celeron то нужно добавить к этому товару новый атрибут  "Процессор (тип)" со значением "Celeron".

 

INSERT IGNORE INTO oc_product_attribute (product_id, attribute_id, language_id, `text`)
SELECT product_id, '11421', language_id, 'Celeron' FROM oc_product_attribute WHERE attribute_id = '702' AND `text` LIKE '%Celeron%'

Вот так должно сработать

  • +1 1
Надіслати
Поділитися на інших сайтах

6 часов назад, dexion сказал:

@Denyelle  Попробуйте как то так:

INSERT INTO oc_product_attribute SELECT pa.product_id, '11421', pa.language_id, 'Celeron', '0' FROM oc_product_attribute pa WHERE pa.attribute_id = 702 AND pa.text LIKE "%Celeron%"

Предварительно бэкапните табл product_attribute

@Denyelle так а мой вариант не работает, проверили? 

Надіслати
Поділитися на інших сайтах

15 часов назад, dexion сказал:

@Denyelle так а мой вариант не работает, проверили? 

да сработал. Спасибо!

 

Только ругается, если второй раз запускать - типа к товару уже добавлен такой атрибут.

Notice: Error: Duplicate entry '275363-11421-1' for key 'PRIMARY'

Змінено користувачем Denyelle
Надіслати
Поділитися на інших сайтах


16 часов назад, SooR сказал:

 


INSERT IGNORE INTO oc_product_attribute (product_id, attribute_id, language_id, `text`)
SELECT product_id, '11421', language_id, 'Celeron' FROM oc_product_attribute WHERE attribute_id = '702' AND `text` LIKE '%Celeron%'

Вот так должно сработать

тоже сработало. Спасибо!

Надіслати
Поділитися на інших сайтах


6 часов назад, Denyelle сказал:

Только ругается, если второй раз запускать - типа к товару уже добавлен такой атрибут.

 

Все правильно, защита от дублей

Надіслати
Поділитися на інших сайтах

37 минут назад, dexion сказал:

Все правильно, защита от дублей

я так понял она не мешает - там где нет этого атрибута все равно все создается, поэтому кажется что не страшно....

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.