在 MySQL 中存储数组

Storing array in MySQL

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

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

因此,员工 #1 获得了加利福尼亚州、科罗拉多州、俄勒冈州和新泽西州的执照,员工 #2 获得了加利福尼亚州、佛罗里达州、德克萨斯州和弗吉尼亚州的执照。这在 MySQL 数据库中如何最好地表示?我认为我们不希望将其序列化,因为有人会手动将州许可证输入数据库。我应该只用逗号分隔吗?最终,我将构建一个用于添加和删除员工的小界面,但 PHPMyAdmin 已经构建,因此我们现在更容易使用。

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

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

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

如果您必须将数组保存到单个字段中,那么 serialize() 和 unserialize() 函数就可以解决问题。但您无法对实际内容进行查询。

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

考虑以下数组

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

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

$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)
    )');

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

用户Table: 用户名 |用户名 |用户邮箱 123 |内特 |内特@domain.com

州许可Table: 用户名 |阿兹 |加州 |一氧化碳 |新泽西 |或者 |弗吉尼亚州 123 | 0 | 1 | 0 | 1 | 1 | 0