我正在做一些事情,需要我存储一个对应于每个用户的 id 数组。
每个用户都需要选择多个项目(最少 1 个),每个项目都有一个唯一的 ID。我有一个这些 id 的数组,但我不太确定应该如何将它们存储在数据库中。
现在,我正在使用 php serialize()
来存储数组,但我发现这效率低下,因为我必须使用 php 而不是 sql 查询数据。
我正在寻找更好的方法来做到这一点 - 谢谢!
不要使用序列化格式(如 serialize
或 JSON) - 它为您提供了无法在 SQL 级别查询的数据。
这是一种多对多关系。这通常通过使用连接表来处理。
创建新表。它应该有两列,例如 user_choosing
和 user_chosen
。您可以将 用作组合键,也可以使用单独的列来保存主 ID。
这两列都应该是用户表上的外键。
然后,当您获取用户数组时,循环访问它并为每个用户插入一个新行(user_choosing
列是提交数据的用户)。
然后,可以使用 JOINS 将数据从数据库中取回,并且关联保持不变。
使用序列化实际上有很多问题,如果在不久的将来弃用它,我不会感到惊讶,你最好只使用 json_encode/json_decode。
http://php.net/manual/en/function.json-encode.php
http://php.net/manual/en/function.json-decode.php
使用浮子等类型时不仅json_encode更安全,而且更快、更清洁。
更新
json_encode页面的引述:
从数据库解码字符串时,请确保输入在输入数据库时使用正确的字符集进行编码。