在MySQL中存储数组

时间:2015-06-01 22:31:55

标签: php mysql phpmyadmin

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

如果必须将数组保存到单个字段中,那么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)
    )');

答案 1 :(得分:0)

所以听起来我需要有一个用户表,还有一个状态许可表,用户ID将两者联系起来,然后将每个可能的状态许可证作为一个表,如果他们获得许可,则用1标记是不是州或没有?然后我可以查询找到userID然后分析状态许可表以获得用户资格以获得潜在客户。我想我正在努力解决不容易存储阵列的问题。

用户表: userID | userName | USEREMAIL 123 | nate | nate@domain.com

国家许可表: userID | AZ | CA | CO | NJ |或者| VA 123 | 0 | 1 | 0 | 1 | 1 | 0