单个MySQL列中的首选项列表

时间:2019-06-27 19:04:25

标签: php mysql

我目前正在为用户登录脚本编写代码。该脚本还具有一个选项,用于启用“ IP标识”以检查登录用户的IP是否与MySQL数据库中存储的IP相匹配。我还希望人们能够添加多个IP地址。我目前正在使用一个简单的PHP数组,例如:

$IP_array = array("xxx.xxx.xxx.xx1", "xxx.xxx.xxx.xx2", "xxx.xxx.xxx.xx3");

因此,它可以检查Array值之一是否与数据库中给定的IP地址之一匹配。问题是;它不是最有效的选择,也不支持CRUD。我还尝试将每个IP都分配给它自己的列,但这意味着我必须为每个IP地址创建一个新列,但是它应该是无限制的,因此这就是为什么我希望将其放在一个列中。

我该如何编码一种更有效的方式来将多个值存储在仅一列(如数组)中,该列还支持:添加值和删除值?

1 个答案:

答案 0 :(得分:2)

仅需扩展我上面的评论,现在您就可以看到以下内容:

╔══════════╗
║   User   ║
╠══════════╣
║ ID       ║
╠══════════╣
║ Name     ║
╠══════════╣
║ Address  ║
╚══════════╝

哪个地址可以正常工作?但是您想添加更多。您可以这样做:

╔══════════╗
║   User   ║
╠══════════╣
║ ID       ║
╠══════════╣
║ Name     ║
╠══════════╣
║ Address1 ║
╠══════════╣
║ Address2 ║
╚══════════╝

但是正如您正确指出的那样,您将“必须为每个IP地址创建一个新列。”

相反,您应该创建一个新表,这样就可以了:

╔══════════╗        ╔═══════════╗                  
║   User   ║        ║ Addresses ║                  
╠══════════╣        ╠═══════════╣                  
║ ID       ║        ║ UserID    ║                  
╠══════════╣        ╠═══════════╣                  
║ Name     ║        ║ Address   ║                  
╚══════════╝        ╚═══════════╝                  

用户的ID指示两者之间的关系,应在地址表上将其指定为外键。查询时,您将执行以下操作:

SELECT Name, Address FROM User U LEFT JOIN Addresses A ON (U.ID = A.UserID) WHERE ID = ?

您将为每个地址得到一行。