|
|
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
Доброго дня! Помогите сделать запросик. Имееются товары с атрибутами такого вида. product_id attribute_id language_id text701 629 4 7.5 x 28.8 x 51 см719 629 4 4 x 58 x 51 см1026 629 1 9.8x58x51 см1033 629 4 5x59x52 см text это размер ВхШхГ . Создать новые атрибуты с уникальными attribute_id(Высота,Ширина,Глубина) и к каждому товару в зависимости от поля text добавить ещё атрибуты.У многих товаров есть только ШхГ и тут нужно делать только по 2-м параметрам. т.е Должно быть так на примере product_id 701 product_id attribute_id language_id text701 999 4 7.5 см701 998 4 28.8 cм701 997 4 51 см ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2016, 10:15 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
А в чём сложности? выкусывайте по одному атрибуту с использованием SUBSTRING_INDEX() и добавляйте в таблицу. Всего получится три запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2016, 11:12 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
в SQL не силён, поэтому прошу помощи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2016, 16:39 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
up ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 09:27 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
AkinaА в чём сложности? выкусывайте по одному атрибуту с использованием SUBSTRING_INDEX() и добавляйте в таблицу. Всего получится три запроса. Из описания, эта функция берёт количество все символы до и после разделителя. В моём же примере нужно барть ещё из серидины, между разделителями. Как между х**х взять? Притом этот параметр может быть в виде 52.2 или 58.88 или же 40 т.е количество символов разное. **х**х** ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 09:31 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
tiraelius, Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 09:51 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
tanglirtiraelius, Код: sql 1. Спасибо за ответ. делаю так SELECT * FROM `oc_product_attribute` WHERE SUBSTRING_INDEX( SUBSTRING_INDEX( `text` , 'x', 1 ) , 'x' , -1 ) AND `attribute_id` =629 Если добавляю and и `attribute_id` то SUBSTRING_INDEX не фильтрует. Что я делаю не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 09:59 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
SUBSTRING_INDEX возвращает строку. Вам, наверное, надо её с чем-то сравнить?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 10:03 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
tanglirSUBSTRING_INDEX возвращает строку. Вам, наверное, надо её с чем-то сравнить?.. или перенести её из раздела WHERE в раздел SELECT, если её надо получить в качестве результата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 10:05 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
tanglirSUBSTRING_INDEX возвращает строку. Вам, наверное, надо её с чем-то сравнить?.. Не совсем понимаю как сравнивать с чем и зачем. Нужно из определённых атрибутов(например 629) к которым привязан text вытащить значение ВхШхГ и записать в эту же таблицу но под новым атрибутом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 10:08 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
tiraelius, тогда см. пост anvano. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 10:09 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
anvanotanglirSUBSTRING_INDEX возвращает строку. Вам, наверное, надо её с чем-то сравнить?.. или перенести её из раздела WHERE в раздел SELECT, если её надо получить в качестве результата. Спасибо за подсказку. Делаю так SELECT `product_id` , `attribute_id` , SUBSTRING_INDEX( SUBSTRING_INDEX( `text` , 'x', 2 ) , 'x' , -1 ) FROM `oc_product_attribute` WHERE `attribute_id` =629 Выдаёт то что нужно. Но как я и говорил есть позиции у которых есть ВхШхГ но и те у которых нет одного параметра а есть только ШхГ. и нужно Доп фильтровать такие позиции. Пробывал like '%x%' но так не срабатывает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 10:14 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
tiraelius , поскольку там в данных ещё дофига лишних пробелов, нужно после каждого SUBSTRING_INDEX() тримать оставшуюся часть. tiraeliusWHERE SUBSTRING_INDEX( SUBSTRING_INDEX( `text` , 'x', 1 ) , 'x' , -1 ) Это условие проверяет, что выражение хоть что-то возвращает. А оно обязательно что-то вернёт, если в поле text имеется хотя бы один символ, не равный пробелу или 'x'. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 10:17 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
Akina tiraelius , поскольку там в данных ещё дофига лишних пробелов, нужно после каждого SUBSTRING_INDEX() тримать оставшуюся часть. tiraeliusWHERE SUBSTRING_INDEX( SUBSTRING_INDEX( `text` , 'x', 1 ) , 'x' , -1 ) Это условие проверяет, что выражение хоть что-то возвращает. А оно обязательно что-то вернёт, если в поле text имеется хотя бы один символ, не равный пробелу или 'x'. Спасибо за ответ. Да есть пробелы в тексте и замыкающий параметр имеет приписку см. Непойму как TRIM вписать в SELECT. Делаю так SELECT `product_id`,`attribute_id`, TRIM(BOTH,'' FROM substring_index(substring_index(`text`,'x',2),'x',-1) FROM `oc_product_attribute` where `attribute_id` = 629 но терплю фиаско. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 10:34 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
tiraeliusно терплю фиаско.Что, сервер прямо так и говорит "хозяин, мы потерпели фиаско!". Или всё-таки выводит сообщение об ошибке? ЗЫ. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. результат:product_idattribute_idTRIM(BOTH '' FROM substring_index(substring_index(`text`,'x',2),'x',-1))701629 28.8 719629 58 ЧЯДНТ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 10:42 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
tanglirtiraeliusно терплю фиаско.Что, сервер прямо так и говорит "хозяин, мы потерпели фиаско!". Или всё-таки выводит сообщение об ошибке? ЗЫ. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. результат:product_idattribute_idTRIM(BOTH '' FROM substring_index(substring_index(`text`,'x',2),'x',-1))701629 28.8 719629 58 ЧЯДНТ? Спасибо ! А что за t0 ? Делаю так SELECT `product_id`,`attribute_id` , TRIM(BOTH '' FROM substring_index(substring_index(`text`,'x',2),'x',-1)) from ( select product_id, attribute_id, language_id, text union all select ) t0 where `attribute_id` = 629 Ругается #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 ') t0 where `attribute_id` = 629' at line 6 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 10:55 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
tiraelius, а вы почитайте про union all - глядишь, и вопрос отпадёт сам собой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 11:06 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
Пользуйся... Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 11:12 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
Поправка. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 11:27 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
Akina, Спасибо за ответ. Я в SQL не силён.Непойму как использовать... Надо подставить значения в данные строки, вот так? CREATE FUNCTION SUBSTRING_BY_INDEX(text VARCHAR(255), x VARCHAR(255), 1 INT) IF ((LENGTH(text) - LENGTH(REPLACE(text, x, ''))) / LENGTH(x) >= 1 - 1) AND (1 > 0) THEN RETURN TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(text, x, 1), x, -1)); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 11:34 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
tanglirtiraelius, а вы почитайте про union all - глядишь, и вопрос отпадёт сам собой. Почитал, про t0 так и не понял. :| ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 11:35 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
tiraeliusЯ в SQL не силён.Непойму как использовать... Первый код (в исправленном варианте) запустить однократно. После этого станет доступна функция SUBSTRING_BY_INDEX(), которую можно использовать в любых запросах. Пример её использования - во втором блоке кода. Т.е. твой запрос будет выглядеть типа Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 11:47 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
У меня ощущение что мы уходим в другую сторону. Вот запрос который работает Код: sql 1. 2. 3. 4. 5. 701 629 28.8702 629 51 см703 629 51 см Вот сами записи 701 629 4 7.5 x 28.8 x 51 см 701 629 1 7.5 x 28.8 x 51 см 702 629 1 29 x 51 см 703 629 1 58 x 51 см Нужно что бы получилось, как пример 999 - Высота 998 - Ширина 997 - Глубина 701 999 4 7.5см702 997 4 51 см703 998 4 58 см Т.е добавить всем по см и отфильтровать ВхШхГ от ШхГ чтобы не получилось каши. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 11:49 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
tiraelius, данные, из которых производится select, получаются подзапросом. каждый подзапрос должен иметь свой алиас(имя). вот "t0" и есть это имя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 11:50 |
|
||
|
Запрос на создание новых атрибутов на основе имеющихся
|
|||
|---|---|---|---|
|
#18+
AkinatiraeliusЯ в SQL не силён.Непойму как использовать... Первый код (в исправленном варианте) запустить однократно. После этого станет доступна функция SUBSTRING_BY_INDEX(), которую можно использовать в любых запросах. Пример её использования - во втором блоке кода. Т.е. твой запрос будет выглядеть типа Код: sql 1. 2. Вот что выдаёт Код: 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2016, 11:54 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39212350&tid=1831902]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
149ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 260ms |
| total: | 518ms |

| 0 / 0 |
