This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Вопрос Выбор нескольких значений из одной строки MySQL

dreamharakiri

Новый участник
25 Дек 2021
75
1
49
В общем, обшарив интернет, погуглив (я правда гуглил ахах), не нашел простого решения проблема, все что находил - какое-то замудренное, поэтому прошу помочь.
В строке, через запятую, указаны значения, нужно отдельно их вытащить. Вот скрин
 

IronPython

Начинающий специалист
7 Ноя 2020
169
62
102
Как я понимаю все это нужно сделать на чистом sql ?
 

IronPython

Начинающий специалист
7 Ноя 2020
169
62
102

IronPython

Начинающий специалист
7 Ноя 2020
169
62
102

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
Вообще это относительно плохой метод хранения данных. Если есть возможность, я бы лучше рекомендовал 3 столбца с значением int, чем 1 столбец с varchar, в котором будут эти 3 int. Меньше проблем, меньше мороки, более понятно при изменениях и легче работать с самими данными. Но если отвечать строго по твоему вопросу, то ты забираешь данные, как string, в коде делаешь split по символу ", ", получаешь массив из 3х string, каждый из них конвертишь в инт, получаешь все 3 числа.
 
Реакции: dreamharakiri

IronPython

Начинающий специалист
7 Ноя 2020
169
62
102
Ну а вдруг там у него типа массив который у каждого юзера отличается, также там может быть тысяча элементов, и типа делать тысячу столбцов? Вообще Да, нужно сначала узнать что он в этой колонке хранит )
 

Vermilion

Высший разум
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,278
754
181
34
Соглашусь, не лучший способ хранения данных а таблице. Но, как вариант решения:
SQL:
SELECT *
FROM test
CROSS JOIN JSON_TABLE( CONCAT('[', test, ']'),
                       "$[*]" COLUMNS( value VARCHAR(254) PATH "$" )
                     ) AS value;
 

welaurs

Начинающий специалист
30 Ноя 2021
20
49
48
Можно применить более корректный способ и создать таблицу с подобной структурой:
SQL:
CREATE TABLE test (
    id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user_id BIGINT NOT NULL,
    `key` INT NOT NULL,
    `value` INT NOT NULL
);
А после получить запросом данные:
SQL:
SELECT * FROM test WHERE user_id = ? ORDER BY `key` ASC
Как альтернативный вариант использовать не VARCHAR, а JSON и сохранять непосредственно массив элементов дабы потом не сплитить.
 
Реакции: XDeveluxe и IronPython

dreamharakiri

Новый участник
25 Дек 2021
75
1
49
храню я там параметры внешности, то есть отдельно для каждой части лица делать столбец- не самое приятное решение
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
То есть, по факту, кроме внешней неэстетичности, проблемы в этом нет?
Менее удобно работать в коде тоже, лишний раз нужно джсонить, больше шанс получить каррапченную дату, если будешь что-то руками менять