OC v3.х Сложный запрос SQL

  • Автор темы Автор темы Astronaut
  • Дата начала Дата начала

Astronaut

Разрушитель (V)
Сообщения
383
Реакции
157
Баллы
1 013
Всем привет. Устал уже нейронки доставать и помочь не могут толком или я не правильно пишу. Помогите кому не лень пжл
1. Мне надо из таблицы oc_product_description взять данные из product_id и name. у name взять только слово или часть из слова которая содержит 600*2000 или 800*2000 например. (name может быть 68ДГ0№900х2000 eco или раздельно BARCELONA 2 | POLAR 600х2000 Белая эмаль/Polar)
Screenshot_4.png

2. Но только те product_id которые в таблице oc_product_to_category соответствуют category_id = 59
Screenshot_6.png

3 И затем поместить их в таблицу oc_product_attribute связав по product_id и присвоив attribute_id = 26 и поле text которое из части name в первом пункте (600*2000)
Screenshot_5.png



Нейросеть советует так, но не работает такое
своих пониманий в этом конечно не много

INSERT INTO oc_product_attribute (product_id, attribute_id, text)
SELECT
pd.product_id,
26 AS attribute_id,
TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(pd.name, ' ', numbers.n), ' ', -1)) AS text
FROM oc_product_description pd
INNER JOIN oc_product_to_category ptc ON pd.product_id = ptc.product_id
INNER JOIN (
SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5
) numbers
ON CHAR_LENGTH(pd.name) - CHAR_LENGTH(REPLACE(pd.name, ' ', '')) >= numbers.n - 1
WHERE
ptc.category_id = 59
AND SUBSTRING_INDEX(SUBSTRING_INDEX(pd.name, ' ', numbers.n), ' ', -1) REGEXP '^[0-9]{3}\*[0-9]{4}$'
GROUP BY pd.product_id, text;
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    27,1 КБ · Просмотры: 3
INSERT INTO oc_product_attribute (product_id, attribute_id, text)
SELECT
pd.product_id,
26 AS attribute_id,
REGEXP_SUBSTR(pd.name, '[0-9]{2,5}[*xх×][0-9]{2,5}') AS text
FROM oc_product_description pd
JOIN oc_product_to_category ptc ON pd.product_id = ptc.product_id
WHERE ptc.category_id = 59
AND pd.name REGEXP '[0-9]{2,5}[*xх×][0-9]{2,5}';

Минимальную и максимальную длину подставьте под себя только (от 2 до 5 сейчас)
MySQL 8 нужен
 
Может пригодится кому
поправил запрос немного
в нем были разные форматы размеров потому что все заливается в 1С из разных прайсов
600*2000
600х2000
600Х2000
и тд
вот так отлично. Можно из части названия формировать Характеристику Размер дверей например

INSERT INTO oc_product_attribute (product_id, attribute_id, language_id, text)
SELECT
pd.product_id,
26 AS attribute_id,
1 AS language_id,
REPLACE(
REPLACE(
REPLACE(
REGEXP_SUBSTR(pd.name, '[0-9]{2,5}[*xх×][0-9]{2,5}'),
'*',
'x'
),
'х',
'x'
),
'×',
'x'
) AS text
FROM oc_product_description pd
JOIN oc_product_to_category ptc ON pd.product_id = ptc.product_id
WHERE ptc.category_id = 59
AND pd.name REGEXP '[0-9]{3,3}[x*х×][0-9]{4,4}';
 
Назад
Верх