|
|
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
Добрйы день. Имеется не простая задачка, покрайней мере для меня. Имеются 3 таблицы `oc_product_description`,`oc_attribute_description`,`oc_product_attribute` oc_product_description - хранит название продукта и description oc_product_attribute - хранит значение атрибутов oc_attribute_description - хранит наименование атрибутов. Имеется запрос UPDATE `oc_product_description`,`oc_attribute_description`,`oc_product_attribute` set `oc_product_description`.`description`= concat ('Вы можете приобрести ',`oc_product_description`.`name`,' с гарантией от производителя.',' ',`oc_attribute_description`.`name`,' ',`oc_product_attribute`.`text`,' на ',`oc_product_attribute`.`text`) where `oc_product_description`.`product_id` = 102 and `oc_product_description`.`language_id` = 4 and `oc_attribute_description`.`language_id` = `oc_product_attribute`.`language_id` and `oc_product_attribute`.`language_id` = `oc_product_description`.`language_id` and `oc_attribute_description`.`attribute_id` = `oc_product_attribute`.`attribute_id` and `oc_product_attribute`.`product_id` = `oc_product_description`.`product_id` and `oc_attribute_description`.`attribute_id` in (2,4,1,10) Он работает но не так как требуется. Каждый `oc_attribute_description`.`attribute_id` имеет своё значение. Необходимо что бы `oc_product_attribute`.`text` выводились в поле `oc_product_description`.`description` в нужный момент свой.Cейчас выводится text только с id 2 oc_product_description`.`product_id` = 102 задано с целью тестирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2015, 17:19:36 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
Раз тебе нужны записи 4 разных типов (`oc_attribute_description`.`attribute_id` in (2,4,1,10) ), изволь приматывать в запрос 4 копии таблицы oc_attribute_description, и из каждой брать текстовку для одного нужного атрибута. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2015, 17:48:14 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
Не понял, как это должно выглядеть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2015, 17:52:11 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
То что нужно брать текстовку это понятно но как её приматывать в concat непонятно. Пробывал переменными но тоже не вышло ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2015, 17:55:24 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2015, 18:03:54 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
Не могу понять, поясните пожалуйста. Что за pd , pa и как их использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2015, 18:26:50 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
Вроде понял. Поменял запрос на такой. UPDATE `oc_product_description` pd JOIN `oc_attribute_description` ad JOIN `oc_product_attribute` pa2 ON pa2.attribute_id = pa2.attribute_id AND pa2.attribute_id = 2 JOIN `oc_product_attribute` pa4 ON pa4.attribute_id = pa4.attribute_id AND pa4.attribute_id = 4 JOIN `oc_product_attribute` pa1 ON pa1.attribute_id = pa1.attribute_id AND pa1.attribute_id = 1 JOIN `oc_product_attribute` pa10 ON pa10.attribute_id = pa10.attribute_id AND pa10.attribute_id = 10 JOIN `oc_product_attribute` pl ON pl.language_id = pl.language_id AND pl.language_id = 4 JOIN `oc_product_attribute` pap ON pap.product_id = pap.product_id JOIN `oc_product_attribute` pat ON pat.text = pat.text set pd.`description`= concat ('Вы можете приобрести ',pd.`name`,' с гарантией от производителя.',' ',ad.`name`,' ',pat.`text`,' на ',pat.`text`) where pd.`product_id` = 102 and pd.`language_id` = 4 and ad.`language_id` = pl.`language_id` and pl.`language_id` = pd.`language_id` or ad.`attribute_id` = pa2.`attribute_id` or ad.`attribute_id` = pa4.`attribute_id` or ad.`attribute_id` = pa1.`attribute_id` or ad.`attribute_id` = pa10.`attribute_id` and pap.`product_id` = pd.`product_id` Есть пара проблем, 1) на хостинге такой запрос не может выполниться, всё начинает виснуть) 2) в concat у меня по прежнему pat.`text`,' на ',pat.`text` не прикреплённые к определённому attribute_id, как это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2015, 11:55:28 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
tiraelius, план гляди. где план? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 08:12:05 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
tiraelius, OR без скобок обрабатывает всю таблицу - так и задумывалось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 09:35:44 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Что имеете в виду под планом? я не супер спец в sql , могу допускать ошибки. lamer yuga, А как по другому, attribut id должен же найти совпадение, или есть другой выход? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 10:48:17 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
У кого есть какие идеи пишите пожалуйста развёрнуто, потому что я в тупике. Если есть вопросы спрашивайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 10:56:23 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
tiraelius Код: sql 1. 2. Есть пара проблем, 1) на хостинге такой запрос не может выполниться, всё начинает виснуть) Бугага !1 Ещё бы ! :) написал бы сразу ON 1=1 Автор, добрый совет Не выноси тут мозг людям со своим придуманным решением! Приведи небольшой пример данных таблиц, и результат, который ты на них хочешь получить. ... и в тегах , в тегах, Карл !! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 11:02:13 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
1=1tiraelius Код: sql 1. 2. Есть пара проблем, 1) на хостинге такой запрос не может выполниться, всё начинает виснуть) Бугага !1 Ещё бы ! :) написал бы сразу ON 1=1 Автор, добрый совет Не выноси тут мозг людям со своим придуманным решением! Приведи небольшой пример данных таблиц, и результат, который ты на них хочешь получить. ... и в тегах , в тегах, Карл !! Ok. 3 таблицы oc_product_description - хранит название продукта и description oc_product_attribute - хранит значение атрибутов oc_attribute_description - хранит наименование атрибутов. oc_product_description product_id | 102 | 102 language_id | 4 | 1 name | Вытяжка | Вытяжка description | ........ | ........ oc_product_attribute product_id | 102 | 102 | 102 attribute_id | 2 | 2 | 3 language_id | 4 | 1 | 4 text | встраиваемая в шкаф | встраиваемая в шкаф | серый oc_attribute_description attribute_id | 2 | 2 | 3 language_id | 4 | 1 | 4 name | Установка | Установка | Цвет language_id имеются 2 но интересует только 4, это русский. Грубый пример на 1 товаре. Нужно. в таблице oc_product_description вывести в поле description, такую фишку: Вы можете приобрести 'Вытяжку' с гарантией от производителя 'Установка' 'встраиваемая в шкаф' и 'Цвет' 'серый'. нужные фразы с подставлением взяты в кавычки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 12:03:12 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
tiraelius1=1пропущено... Бугага !1 Ещё бы ! :) написал бы сразу ON 1=1 Автор, добрый совет Не выноси тут мозг людям со своим придуманным решением! Приведи небольшой пример данных таблиц, и результат, который ты на них хочешь получить. ... и в тегах , в тегах, Карл !! Ok. 3 таблицы oc_product_description - хранит название продукта и description oc_product_attribute - хранит значение атрибутов oc_attribute_description - хранит наименование атрибутов. oc_product_description Код: sql 1. 2. 3. 4. oc_product_attribute Код: sql 1. 2. 3. 4. oc_attribute_description Код: sql 1. 2. 3. language_id имеются 2 но интересует только 4, это русский. Грубый пример на 1 товаре. Нужно. в таблице oc_product_description вывести в поле description, такую фишку: Вы можете приобрести 'Вытяжку' с гарантией от производителя 'Установка' 'встраиваемая в шкаф' и 'Цвет' 'серый'. нужные фразы с подставлением взяты в кавычки.типа такого что-то отладь и потом переделаешь на UPDATE Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 12:33:53 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
1=1, Забыл про ещё одну таблицу. oc_product_to_category product_id category_id в ней идёт сопоставление продукта и относящейся к ней категории товара. Как к этому запросу ещё category_id прилипить что бы обновлялось description только товаров из данной категории? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 13:07:42 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
tiraelius1=1, Забыл про ещё одну таблицу. oc_product_to_category product_id category_id в ней идёт сопоставление продукта и относящейся к ней категории товара. Как к этому запросу ещё category_id прилипить что бы обновлялось description только товаров из данной категории? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 13:11:58 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
1=1, Не могу никак под update загнать. ругается #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from `oc_product_description` pd inner join `oc_product_attribute` pa on pd.pr' at line 10 делаю так авторUPDATE `oc_product_description` set `oc_product_description`.`description`= concat( 'Вы можете приобрести ', pd.name, ' с гарантией от производителя', ' ', max(case when ad.attribute_id=2 then ad.name end), ' ', ' ', max(case when ad.attribute_id=2 then pa.text end), ' ', ' и ', ' ', max(case when ad.attribute_id=3 then ad.name end), ' ', ' ', max(case when ad.attribute_id=3 then pa.text end), ' ') as xz from oc_product_description pd inner join oc_product_attribute pa on pd.product_id=pa.product_id and pd.language_id=pa.language_id inner join oc_attribute_description ad on pa.attribute_id=ad.attribute_id and pa.language_id=ad.language_id inner join oc_product_to_category pc on pc.product_id=pa.product_id where pd.language_id=4 and pa.attribute_id in (2,3) and pc.category_id = 121 and pa.product_id = 102 group by pd.name ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 13:29:31 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
tiraeliusругаетсяпотому что не надо изобретать свой синтаксис ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 13:35:46 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
поменял на UPDATE `oc_product_description` pd inner join oc_product_attribute pa on pd.product_id=pa.product_id and pd.language_id=pa.language_id inner join oc_attribute_description ad on pa.attribute_id=ad.attribute_id and pa.language_id=ad.language_id inner join oc_product_to_category pc on pc.product_id=pa.product_id set pd.`description`= concat( 'Вы можете приобрести ', pd.name, ' с гарантией от производителя', ' ', max(case when ad.attribute_id=2 then ad.name end), ' ', ' ', max(case when ad.attribute_id=2 then pa.text end), ' ', ' и ', ' ', max(case when ad.attribute_id=3 then ad.name end), ' ', ' ', max(case when ad.attribute_id=3 then pa.text end), ' ') where pd.language_id=4 and pa.attribute_id in (2,3) and pc.category_id = 121 and pa.product_id = 102 тож не катит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 13:38:13 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
tiraelius, или так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. (не факт, что в МуСКЛ такое пройдёт) или так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 13:42:03 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
В каждом находит ошибки ситаксиса. Давайте 1 вариант разберём. авторUPDATE `oc_product_description` pd inner join oc_product_attribute pa on pd.product_id=pa.product_id and pd.language_id=pa.language_id inner join oc_attribute_description ad on pa.attribute_id=ad.attribute_id and pa.language_id=ad.language_id inner join oc_product_to_category pc on pc.product_id=pa.product_id set pd.`description`= concat( 'Вы можете приобрести ', pd.name, ' с гарантией от производителя', ' ', max(case when ad.attribute_id=2 then ad.name end), ' ', ' ', max(case when ad.attribute_id=2 then pa.text end), ' ', ' и ', ' ', max(case when ad.attribute_id=3 then ad.name end), ' ', ' ', max(case when ad.attribute_id=3 then pa.text end), ' ') where pd.language_id=4 and pa.attribute_id in (2,3) and pc.category_id = 121 and pa.product_id = 102 тут ошибка 1111 invalid use of group function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 13:51:12 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
tiraeliusтут ошибка 1111 invalid use of group functionэто как раз было из разряда 1=1(не факт, что в МуСКЛ такое пройдёт) давай ошибки второго ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 14:01:58 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
1=1, #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from oc_product_description pd inner join oc_product_attribute pa on pd.produc' at line 10 после этой ошибки я from поднимал перед set , потом мускул ругается на group by и если его убрать то 1111 идёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 14:04:59 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38978385&tid=1833076]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 349ms |

| 0 / 0 |
