Задавайте вопросы, мы ответим
Вы не зашли.
Есть таблица:
CREATE TABLE `sessions` (
`session_id` VARCHAR(150) NOT NULL,
`session_value` MEDIUMTEXT NOT NULL,
`session_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE INDEX `session_id` (`session_id`),
INDEX `index_session_id` (`session_id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;
Необходимо выбрать из поля session_value значения UserID.
В поле строка следующего вида
UserID:NDU4Mg==:;UserType:VXNlcg==:;UserLastname:0JrQsNC70LjRg9GI0LrQvg==:;
Проблема в том, что значение UserID в строке может быть в любом месте.
Значит я хотел получить номер символа UserID и подставить его в SUBSTRING:
select LOCATE('UserID', session_value) from sessions
214
149
2979
select *, SUBSTRING(session_value,214,15) from sessions
UserID:NDU4Mg==
Не хватает знаний как объединить два селекта выше вместе. Думал как-то так
select *, SUBSTRING(session_value,(select LOCATE('UserID', session_value) from sessions),15) from sessions
Но не работает.
Подскажите как решить задачу.
Неактивен
SELECT SUBSTRING(LOCATE('UserID', session_value), 15) FROM sessions
Но вообще имеет смысл разные куски этого текста хранить в разных столбцах. Иначе Вы
теряете все преимущества реляционной базы данных.
Неактивен
Спасибо за подсказку. В итоге получился такой селект:
# Общее количество сессий
select count(*) as 'count' from sessions
union all
# Уникальные сессии
select count(*) from (select SUBSTRING(session_value,LOCATE('UserID', session_value),15) from sessions group by 1) as tt
Неактивен