У меня есть person
таблица с ниже структурой.
CREATE TABLE person(id integer, details LONGTEXT);
INSERT INTO person(id,details)
VALUES
(1, "name:Tahir,age:30,sex:male"),
(2, "name:Tina,sex:female,status:1");
Проблема: у меня есть некоторые ограничения на конец db, не могу добавить новые таблицы/столбцы, поэтому им нужно импровизировать с доступным столбцом, который детализирует LONGTEXT. Итак, у меня нет другого пути, кроме как найти обходной путь.
Итак, я хочу разделить колонку детали запятой и показать результаты в столбцах разницы. Например, в этом примере результатом будет идентификатор, имя, возраст, пол, статус
Я считаю, что это возможно с помощью агрегатных функций, и я попытался создать запрос, как показано ниже.
SELECT id,
if(person.details like '%name:%',cast(substring_index(substring_index(person.details,'name:',-1),',',1) as unsigned),null) as 'name',
if(person.details like '%age:%',cast(substring_index(substring_index(person.details,'age:',-1),',',1) as unsigned),null) as 'age',
if(person.details like '%sex:%',cast(substring_index(substring_index(person.details,'sex:',-1),',',1) as unsigned),null) as 'sex',
if(person.details like '%status:%',cast(substring_index(substring_index(person.details,'status:',-1),',',1) as unsigned),null) as 'status'
FROM person
выше запроса берет данные правильно для возраста, но имя и пол получает 0. Не могли бы вы выяснить, что я здесь отсутствует?
Вы бросаете видимые строки как unsigned (целые числа). Не нужно бросать:
SELECT
id,
if(person.details like '%name:%',substring_index(substring_index(person.details,'name:',-1),',',1),null) as 'name',
if(person.details like '%age:%',cast(substring_index(substring_index(person.details,'age:',-1),',',1) as unsigned),null) as 'age',
if(person.details like '%sex:%',substring_index(substring_index(person.details,'sex:',-1),',',1),null) as 'sex'
FROM person