【问题标题】:Storing array in MySQL在 MySQL 中存储数组
【发布时间】:2015-06-03 11:32:14
【问题描述】:

我试图弄清楚如何最好地将数组存储到可以从 PHPMyAdmin 操作的 MySQL 字段中。

我们正在使用 PHPMyAdmin 将员工输入到 MySQL 数据库中的表中,其中一列是州许可。我们将评估他们获得许可的州,以确定他们是否有资格获得通过 POST 在我们的 CRM 中分配给他们的特定潜在客户。我们将检查他们的州许可是否与客户的州以及其他一些参数相匹配,以确定我们是否应该对他们执行潜在客户分配(即配额阈值、活动会话、轮到他们了吗?等等)。

因此,员工 #1 在 CA、CO、OR 和 NJ 获得许可,员工 #2 在 CA、FL、TX 和 VA 获得许可。这在 MySQL 数据库中如何最好地表示?我认为我们不希望将其序列化,因为有人会手动将州许可证输入数据库。我应该让它用逗号分隔吗?最终我将构建一个用于添加和删除员工的小界面,但 PHPMyAdmin 对我们来说现在更容易使用,因为它已经构建了。

我想从数据库中提取字段,将州许可证放入一个数组中进行分析,然后从那里做出决定。

【问题讨论】:

  • 不要将其存储在单个列中;使用关系表。
  • this answer 有你想要做的基础知识。希望对您有所帮助。

标签: php mysql phpmyadmin


【解决方案1】:

没有将数组存储到单个字段中的好方法。

您需要检查关系数据并对架构进行适当的更改。有关此方法的参考,请参见下面的示例。

如果您必须将数组保存到单个字段中,则 serialize() 和 unserialize() 函数可以解决问题。但是您不能对实际内容执行查询。

作为序列化函数的替代方法,还有 json_encode() 和 json_decode()。

考虑以下数组

$a = array(
    1 => array(
        'a' => 1,
        'b' => 2,
        'c' => 3
    ),
    2 => array(
        'a' => 1,
        'b' => 2,
        'c' => 3
    ),
);

要将其保存在数据库中,您需要创建一个这样的表

$c = mysql_connect($server, $username, $password);
mysql_select_db('test');
$r = mysql_query(
    'DROP TABLE IF EXISTS test');
$r = mysql_query(
    'CREATE TABLE test (
      id INTEGER UNSIGNED NOT NULL,
      a INTEGER UNSIGNED NOT NULL,
      b INTEGER UNSIGNED NOT NULL,
      c INTEGER UNSIGNED NOT NULL,
      PRIMARY KEY (id)
    )');

【讨论】:

    【解决方案2】:

    所以听起来我需要一个用户表和一个州许可表,其中一个用户 ID 将两者链接起来,然后只需将每个可能的州许可表设为一个表,如果他们获得了许可,则将其标记为 1状态还是没有?然后我可以查询以查找用户 ID,然后分析州许可表以了解用户是否有资格获得潜在客户。我想我正在解决不容易存储数组的问题..

    用户表: 用户名 |用户名 |用户邮箱 123 |纳特 | nate@domain.com

    州许可表: 用户名 |亚利桑那州 |加利福尼亚州 |一氧化碳 |新泽西州 |或 |弗吉尼亚州 123 | 0 | 1 | 0 | 1 | 1 | 0

    【讨论】:

    • 我最终只是将其存储为逗号分隔并在查询时将其分解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2015-08-23
    • 2016-12-10
    • 1970-01-01
    • 2016-04-03
    相关资源
    最近更新 更多