Php 在具有序列化数组的字段中进行查询以搜索值

Php 在具有序列化数组的字段中进行查询以搜索值,php,mysql,arrays,serialization,Php,Mysql,Arrays,Serialization,我已经读到这不是一个好的选择,但我没有任何其他方法来做到这一点 我使用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:

我已经读到这不是一个好的选择,但我没有任何其他方法来做到这一点

我使用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;}}
当用户登录时,我需要检查他是否已经有会话正在进行,因此我需要在序列化数组中搜索字段login的值,以检索包含该值的记录(如果存在)


我如何才能做到这一点?

将用户登录信息存储在单独的列中,如

CREATE TABLE  `session` (
    `session_id` VARCHAR( 50 ) NOT NULL ,
    `user_login` VARCHAR ( 50 ) NOT NULL,
    `session_serialized` TEXT NOT NULL ,
    PRIMARY KEY (  `session_id` )
);
您现在可以使用
搜索会话,其中user\u login=?

如果您不能或不想触摸会话表,您还可以创建第二个表来存储哪个用户正在使用哪个会话id。假设您希望一个用户不具有多个会话:

CREATE TABLE  `user_session` (
    `session_id` VARCHAR( 50 ) NOT NULL ,
    `user_login` VARCHAR ( 50 ) NOT NULL,
    PRIMARY KEY (  `user_login` )
);
我不建议通过序列化会话数组进行搜索