2012-03-12 5 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`) 
); 

나는 직렬화 된 세션 배열을 통해 검색을 권하고 싶지 않다.

+0

답장을 보내 주셔서 감사합니다. 시도해 보겠습니다. – Albert

관련 문제