|
|
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
tiraelius, Вообще без from нужно Update pd join (...) a ... set pd.desc = a.xz ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 14:12:58 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#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_id1=1, Я же так и пишу. Или надо по другому? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 16:22:11 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#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 1111 ошибка. проблема в concat его нужно переделать я так думаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2015, 18:27:47 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
max-агрегатная функция, не полетит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2015, 13:06:15 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
1. создай запрос для выборки тех записей что требуется заменить 2. создай запрос который извлекает новое значение description у одной записи, т.е. со сссылкой на первичный ключ 3. первый запрос преврати в апдейт, а второй запрос преврати в set description=sql2, только в sql2 должен ссылаться на первичный ключ sql1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2015, 13:23:07 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
bochkov, Я несовсем понял. Что имеете под первичным ключём? Если по пукнтам то получается так 1) авторselect * from oc_product_description pd inner join oc_product_to_category pc on pd.product_id=pc.product_id 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 where pd.language_id=4 and pa.attribute_id in (2,3) and pc.category_id=121 2) авторselect 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), '" ') from oc_product_description pd inner join oc_product_to_category pc on pd.product_id=pc.product_id 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 where pd.language_id=4 and pa.attribute_id in (2,3) and pc.category_id=121 and pd.product_id = 102 Если их склеивать то получится собственно то что и получалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2015, 13:49:17 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
2 запрос должен вывести одну и только одну запись где в where должен быть определен первичный ключ таблицы pd ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2015, 14:29:24 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
первичный ключ это стобцы в секции primary key таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2015, 14:38:54 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
ну так и получается. в этой таблице примари являются PRIMARY KEY (`product_id`,`language_id`), по сути надо тока убрать category id, но смысл от этого не изменится. Выводится 1 запись потому что задана pd.product_id = 102 и pd.language_id=4 select 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), '" ') from oc_product_description pd inner join oc_product_to_category pc on pd.product_id=pc.product_id 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 where pd.language_id=4 and pa.attribute_id in (2,3) and pd.product_id = 102 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2015, 21:55:42 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
Код: 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. пишу с планшета так что могу ошибиться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2015, 22:33:40 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
сделал вот так авторUPDATE oc_product_description pd inner join oc_product_to_category pc on pd.product_id=pc.product_id inner join oc_product_attribute pa on pd.product_id=pa.product_id and pd.language_id=pa.language_id SET product_description=( select concat( 'Вы можете приобрести ', pd2.name, ' с гарантией от производителя', ' ', max(case when ad2.attribute_id=2 then ad2.name end), ' ', ' ', max(case when ad2.attribute_id=2 then pa2.text end), ' ', ' и ', ' ', max(case when ad2.attribute_id=3 then ad2.name end), ' ', ' ', max(case when ad2.attribute_id=3 then pa2.text end), ' ') from oc_product_description pd2 inner join oc_product_attribute pa2 on pd2.product_id=pa2.product_id and pd2.language_id=pa2.language_id inner join oc_attribute_description ad2 on pa2.attribute_id=ad2.attribute_id and pa2.language_id=ad2.language_id where pd2.language_id=pd.languags_id and pa2.attribute_id in (2,3) and pd2.product_id = pd.product_id and pd.language_id= 4 and pa.attribute_id in (2,3) and pc.category_id= 121 Ошибка такая. #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 '' at line 23 Что может быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 12:09:11 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
tiraeliusЧто может быть?завершающей скобки нет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 12:37:27 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
tanglir, какой скобки, где? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 13:06:12 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
Завершающей. То есть закрывающей, расположенной в самом конце запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 13:11:47 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
tanglir, в phpmyadmin это не требуется он сам доставляет. и в сообщение написано про '' а не про ; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 13:15:45 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
tiraeliusи в сообщение написано про '' а не про ;в сообщени и вообще не написано про какой-либо символ да и сами подумайте, как он может ругаться на скобку (при чём тут точка с запятой, кстати?), если этой скобки в запросе нет? libastral.dll в стандартный комплект поставки мускля, знаете ли, не входит tiraeliusв phpmyadmin это не требуется он сам доставляетда неужели? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 13:26:16 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
tanglir, Ок я дурак. В упор не вижу, что данная скобка должна закрывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 13:32:39 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 13:37:45 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
действительно. получился такй запрос авторUPDATE oc_product_description pd inner join oc_product_to_category pc on pd.product_id=pc.product_id inner join oc_product_attribute pa on pd.product_id=pa.product_id and pd.language_id=pa.language_id SET pd.`description`=( select concat( 'Вы можете приобрести ', pd2.name, ' с гарантией от производителя', ' ', max(case when ad2.attribute_id=2 then ad2.name end), ' ', ' ', max(case when ad2.attribute_id=2 then pa2.text end), ' ', ' и ', ' ', max(case when ad2.attribute_id=3 then ad2.name end), ' ', ' ', max(case when ad2.attribute_id=3 then pa2.text end), ' ') from oc_product_description pd2 inner join oc_product_attribute pa2 on pd2.product_id=pa2.product_id and pd2.language_id=pa2.language_id inner join oc_attribute_description ad2 on pa2.attribute_id=ad2.attribute_id and pa2.language_id=ad2.language_id where pd2.language_id=pd.languags_id and pa2.attribute_id in (2,3) and pd2.product_id = pd.product_id and pd.language_id= 4 and pa.attribute_id in (2,3) and pc.category_id= 121 ) а нашёл ошибку и заменил SET product_description=( на SET pd.`description`=( Выскочил такой ахтунг ERROR 1093 (HY000): You can't specify target table 'pd' for update in FROM clause ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 13:45:10 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
оставь как было закрой скобкой перед where основного запроса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 14:20:04 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
Получается так авторUPDATE oc_product_description pd inner join oc_product_to_category pc on pd.product_id=pc.product_id inner join oc_product_attribute pa on pd.product_id=pa.product_id and pd.language_id=pa.language_id SET pd.`description`=( select concat( 'Вы можете приобрести ', pd2.name, ' с гарантией от производителя', ' ', max(case when ad2.attribute_id=2 then ad2.name end), ' ', ' ', max(case when ad2.attribute_id=2 then pa2.text end), ' ', ' и ', ' ', max(case when ad2.attribute_id=3 then ad2.name end), ' ', ' ', max(case when ad2.attribute_id=3 then pa2.text end), ' ') from oc_product_description pd2 inner join oc_product_attribute pa2 on pd2.product_id=pa2.product_id and pd2.language_id=pa2.language_id inner join oc_attribute_description ad2 on pa2.attribute_id=ad2.attribute_id and pa2.language_id=ad2.language_id ) where pd2.language_id=pd.languags_id and pa2.attribute_id in (2,3) and pd2.product_id = pd.product_id and pd.language_id= 4 and pa.attribute_id in (2,3) and pc.category_id= 121 ERROR 1093 (HY000): You can't specify target table 'pd' for update in FROM clause видимо тут не в скобке дело. Мне тут забугорные парни написали автор I don't think you can update the join of two tables directly. Select query fetches data from multiple tables which is alright but update will not work like that. "Update" is intended to work on a single table only but you are updating the joins of multiple tables. Update с inner join работать мол не будет...... а без него возможно как то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 14:37:06 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
bochkov Код: 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. вообщето версия была такая как минимум 2 секции where ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 14:41:21 |
|
||
|
Вложенный запрос.(сложный)
|
|||
|---|---|---|---|
|
#18+
ok. была некоторая ошибка я заменил SET product_description=( на SET pd.`description`=( в результате получилось авторUPDATE oc_product_description pd inner join oc_product_to_category pc on pd.product_id=pc.product_id inner join oc_product_attribute pa on pd.product_id=pa.product_id and pd.language_id=pa.language_id SET pd.`description`=( select concat( 'Вы можете приобрести ', pd2.name, ' с гарантией от производителя', ' ', max(case when ad2.attribute_id=2 then ad2.name end), ' ', ' ', max(case when ad2.attribute_id=2 then pa2.text end), ' ', ' и ', ' ', max(case when ad2.attribute_id=3 then ad2.name end), ' ', ' ', max(case when ad2.attribute_id=3 then pa2.text end), ' ') from oc_product_description pd2 inner join oc_product_attribute pa2 on pd2.product_id=pa2.product_id and pd2.language_id=pa2.language_id inner join oc_attribute_description ad2 on pa2.attribute_id=ad2.attribute_id and pa2.language_id=ad2.language_id where pd2.language_id=pd.languags_id and pa2.attribute_id in (2,3) and pd2.product_id = pd.product_id ) where pd.language_id= 4 and pa.attribute_id in (2,3) and pc.category_id= 121 ERROR 1093 (HY000): You can't specify target table 'pd' for update in FROM clause ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2015, 14:45:10 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38978459&tid=1833076]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 386ms |

| 0 / 0 |
