【问题标题】:make a query searching for a value in a field with a serialized array使用序列化数组查询字段中的值
【发布时间】:2012-03-12 20:42:05
【问题描述】:

我了解到这不是一个好的选择,但我没有其他方法可以做到这一点。

我使用 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 的值来检索包含该值的记录(如果存在)。

我该怎么做?

【问题讨论】:

    标签: php mysql arrays serialization


    【解决方案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 进行搜索。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-05
      • 2012-08-06
      • 2021-05-08
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多