0

我试图弄清楚如何以及哪种方式最适合将多个条目存储到数据库中和从数据库中获取多个条目。使用explodesplitpreg_split。我需要实现的是用户使用表单中的文本字段向不同的用户发送多条消息或通过输入他们的 ID(如“101,102,103”)和 PHP 代码来与多个用户共享数据,以便足够聪明地通过以下方式获取每个 ID在“,”之后选择它们。我知道这要求很多,但我需要在这方面更熟练的人的帮助。我需要知道如何让 PHP 代码抓取 ID 并能够使用它们的函数。喜欢抓“101,102,103”

我怎样才能做到这一点?示例将非常有帮助。

谢谢

4

3 回答 3

1

如果我正确理解您的问题,如果您正在处理以逗号分隔的 ID 号字符串,那么将它们保持为这种格式可能是最简单的。原因是您可以在查询数据库时在 SQL 语句中使用它。

我假设您要运行SELECT查询以获取已输入 ID 的用户,对吗?您想使用一种SELECT ... WHERE IN ...语句,如下所示:

// Get the ids the user submitted
$ids = $_POST['ids'];
// perform some sanitizing of $ids here to make sure 
// you're not vulnerable to an SQL injection
$sql = "SELECT * FROM users WHERE ID IN ($ids)";
// execute your SQL statement

或者,您可以使用explode创建每个单独 ID 的数组,然后循环遍历,以便您可以对每个值进行一些检查以确保它是正确的,然后再将它们重新连接成一个可以在语句implode中使用的字符串SELECT ... WHERE IN ....

编辑:对不起,忘了补充:就在数据库中存储用户 ID 列表而言,您可以考虑将逗号分隔列表存储为针对消息 ID 的字符串,但这有缺点(很难在其他表上进行 JOINS如果你需要)。或者,更好的选择是创建一个查找类型表,它基本上由两列组成:messageid, userid. 然后,您可以将每个人存储useridmessageid例如

messageid | userid
1 | 1
1 | 3
1 | 5

这种方法的好处是您可以使用此表连接其他表(也许您有一个单独的message表来存储消息本身的详细信息)。

在这种方法下,您将在消息表中创建一个新条目,取回 id,然后将 userids 字符串分解为单独的部分,最后创建INSERT语句以使用各个 id 和消息 id 插入数据。您需要制定其他机制来处理对消息的用户 ID 列表的任何编辑以及删除。

希望这是有道理的!

于 2011-03-25T18:42:56.527 回答
0

好吧,考虑到您建议的三个功能:

  • explode()如果您有一个始终相同 的简单模式,则可以正常工作。
    • 例如,总是', ',但从不','
  • split()使用 POSIX 正则表达式 - 已弃用 -不应再使用
  • preg_split()使用正则表达式作为模式;并且,因此,将接受比 更多的情况explode()


然后:不要在单个数据库列中存储多个值:用它来做任何有用的工作都是不可能的!

创建一个不同的表来存储这些数据,每行有一个值——多行对应于第一个表中的一行。

于 2011-03-25T18:34:34.203 回答
0

我认为你的问题更多的是 SQL 而不是 PHP。

从技术上讲,您可以将 id 存储到单个 MySQL 字段中的“set”字段中,并在您的条件中使用 IN 或FIND_IN_SET对其进行查询。查找实际上非常快,但这不是最佳实践,而是创建了一个非规范化的数据库。

嵌套实践和规范化是创建单独的关系表。因此,使用您的消息示例,您可能会有一个“users”表、一个“messages”表和一个用于在用户之间关联消息的“users_messages”表。'messages' 表将包含消息信息,并且可能包含原始发件人的 'user_id' 字段(因为只能有一个),而 'users_messages' 表将仅包含一个 'user_id' 和 'message_id' 字段,包含将消息链接到它们所属的各种用户的行。然后您只需要使用 JOIN 查询来检索数据,因此如果您要检索用户的收件箱,查询将如下所示:

SELECT
    messages.*
FROM
    messages
    LEFT JOIN users_messages ON users_messages.message_id = messages.message_id
WHERE
    users_messages.user_id = '(some user id)'
于 2011-03-25T18:57:49.203 回答