2012-03-12 2 views
0

Я читал, что это нехороший вариант, но у меня нет другого способа сделать это.сделать запрос на поиск значения в поле с сериализованным массивом

Я использую cakephp и его сеансы базы данных. Все данные сеанса хранится в упорядоченный массив, что-то вроде:

Config|a:3:{s:9:"userAgent";s:32:"c25774da215a84965aadcfd075489db8";s:4:"time";i:1331594676;s:7:"timeout";i:10;}Message|a:0:{}Auth|a:1:{s:7:"Usuario";a:20:{s:10:"id_usuario";s:4:"6658";s:6:"nombre";s:6:"Master";s:8:"apellido";s:4:"User";s:5:"login";s:11:"master-user";s:16:"fecha_nacimiento";s:10:"1998-08-03";s:14:"fecha_registro";s:10:"0000-00-00";s:13:"hora_registro";s:8:"00:00:00";s:4:"pais";s:1:"7";s:9:"provincia";s:2:"CA";s:6:"cuidad";s:5:"dfdff";s:13:"codigo_postal";s:6:"123456";s:6:"ctpais";s:0:"";s:8:"ctcuidad";s:0:"";s:8:"telefono";s:8:"23324234";s:5:"grupo";s:1:"3";s:6:"activo";s:1:"1";s:11:"id_campania";s:3:"999";s:9:"sessiones";s:1:"1";s:10:"admin_camp";s:1:"0";s:6:"codigo";N;}} 

Когда пользователь входит в систему, мне нужно проверить, если он уже имеет сеанс происходит, так что мне нужно сделать поиск запроса для значения поля введите внутри этого сериализованного массива, чтобы получить запись, содержащую это значение, если она существует.

Как я могу это сделать?

ответ

1

Храните пользователь Войти в отдельной колонке, как

CREATE TABLE `session` (
    `session_id` VARCHAR(50) NOT NULL , 
    `user_login` VARCHAR (50) NOT NULL, 
    `session_serialized` TEXT NOT NULL , 
    PRIMARY KEY ( `session_id`) 
); 

Вы можете теперь искать сессий с WHERE user_login = ?.

Если вы не можете или не хотите прикасаться к таблице сеансов, вы также можете создать вторую таблицу, в которой будет использоваться пользователь, который использует session_id. Предполагая, что вы хотите, чтобы пользователь не иметь более одной сессии:

CREATE TABLE `user_session` (
    `session_id` VARCHAR(50) NOT NULL , 
    `user_login` VARCHAR (50) NOT NULL, 
    PRIMARY KEY ( `user_login`) 
); 

Я не рекомендовал бы поиск через сериализованного Session-Array.

+0

Большое спасибо за ваш ответ, я дам вам попробовать! – Albert

Смежные вопросы