Php 如何建立消息数据的层次结构?
我必须建立一个消息的父子层次结构。我有两组消息,一组是我从twitter下载并保存到表中的。这些是根级别的消息。第二组消息是用户(将)作为这些根级别消息的子节点输入的消息。我在应用程序中将根级别的消息显示为无序列表,如:Php 如何建立消息数据的层次结构?,php,mysql,hierarchical-data,Php,Mysql,Hierarchical Data,我必须建立一个消息的父子层次结构。我有两组消息,一组是我从twitter下载并保存到表中的。这些是根级别的消息。第二组消息是用户(将)作为这些根级别消息的子节点输入的消息。我在应用程序中将根级别的消息显示为无序列表,如: - root_msg1 - root_msg2 - root_msg3 我已经做了这么多。 我需要做的下一步是将子节点添加到这些根级别消息中。用户可以单击无序列表中的这些根级别消息中的任何一条,或者指出要输入哪个根节点的子节点,然后输入一条消息,该消息应显示为该根
- root_msg1
- root_msg2
- root_msg3
我已经做了这么多。我需要做的下一步是将子节点添加到这些根级别消息中。用户可以单击无序列表中的这些根级别消息中的任何一条,或者指出要输入哪个根节点的子节点,然后输入一条消息,该消息应显示为该根级别消息的子消息。像
- root_msg1 (user clicks on this root msg & enter a msg that appears as its child)
- msg1_child1
- msg1_child2
- root_msg2
- root_msg3 (user enter a child msg of this root level msg same way)
- msg3_child1
1因此,我需要帮助如何将此层次结构存储到数据库中。然后,根据这一点,我如何将新的子节点添加到数据库中,以便将其显示为特定根的子节点
编辑
我保存到表中的根消息的层次结构与Birth完全相同,唯一的例外是我确实从twitter获得了任何父\u id,只有msg\u id。(实际上,这是将tweets存储到数据库中以向父\u id列添加值的基本原因!)。但我遇到的基本问题是“如何知道哪个节点是哪个父节点的子节点”,正如我在OP中所述,所有根消息在HTML表单上显示为无序列表,用户将通过单击从列表项中选择要进入子节点的项。根消息(即单击列表项)有一个存储在表中的msg_id&它将是子节点的父id,但当用户单击根节点时我需要得到它&我如何得到它。这是我一直困扰我的基本问题。一旦我得到它,希望它能像在数据库中插入新记录一样简单。
这是我的模式:
|---------+-----------+-------------|
| msg_id | parent_id | msg |
|---------+-----------+-------------|
| 1 | NULL | msg1 |
| 2 | NULL | msg2 |
| 3 | NULL | msg3 |
| | ? | msg1_child1 |
| | ? | msg1_child2 |
| | ? | msg3_child1 |
|---------+-----------+-------------|
如果我理解正确,你会对html感到疑惑,对吗? 你只需在分配到的li之后创建另一个无序列表 对于mysql部分,可以使用连接将其放入单个查询中。 更具体地说,我的意思是你把孩子的信息放在不同的地方 表和父表在一个单独的表中,并通过公共分母连接它们 这可以通过GET/POST/SESSION或任何您认为合适的方式进行设置
关于在数据库中存储分层数据有点复杂,这主要取决于您需要如何准确地使用数据。一般来说,一个非常简单的方法是给每一行一个“父id”,它可以指向同一个表中的记录。如果节点是根节点,则此列将为
NULL
或0
那么,对于您的示例数据,您将有一个如下表:
|---------+-----------+-------------|
| node_id | parent_id | title |
|---------+-----------+-------------|
| 1 | NULL | root_msg1 |
| 2 | NULL | root_msg2 |
| 3 | NULL | root_msg3 |
| 4 | 1 | msg1_child1 |
| 5 | 1 | msg1_child2 |
| 6 | 3 | msg3_child1 |
|---------+-----------+-------------|
您可以通过在
parent_id
列中选择NULL
来查找所有根节点,并且可以通过搜索父节点的id来查找其他节点的子节点。实际上,这是我的基本问题如何将子节点与用户希望它成为子节点的对应父节点相关联。我不知道当用户单击列表中的任何根消息时,我如何才能获得用于taht关联的输入或其他内容。根据您的建议,我已经在一个表中包含了所有根消息。现在,当我在另一个目录中获取child时,我如何知道哪个msg是哪个根目录的子目录?twitter是否为您提供消息的父目录id?@Dan D,我的表与此完全相同,根目录的父目录id为null。Twitter没有层次结构,这就是为什么我将tweet下载到表中来处理这些内容。这是我遇到的基本问题“如何知道哪个节点是哪个父节点的子节点”,正如我在OP中所说的,用户将从HTML表单中选择她想要进入子节点的根消息,方法是单击它或以我不知道的任何其他方式。这是我遇到的基本问题me@Dan不,每条消息都有自己的id。推特没有层次结构。这就是为什么我保存推特来操纵它们。这里有一点应该很重要,我将直接从我的应用程序在同一个表中的本地db上存储子节点。这些消息不会发送回twitter,因为这是我看到的用父id存储推文的唯一方法。但为此,我需要获取用户单击的消息的id(存储在表中)。@Chad Birch,我的所有根消息在表中的架构与您在此处创建的完全相同。但我遇到的基本问题是“如何知道哪个节点是哪个父节点的子节点”,正如我在OP中所说的,用户将从HTML表单中选择她想要进入子节点的根消息,方法是单击它或以我不知道的任何其他方式。这是我的基本问题,一直困扰着我。@Exceptable:我不知道你的意思。parent\u id
列中的值告诉您哪个是父项。第4行和第5行在该列中都有1
,这意味着它们的父行是第1行。第6行有3
,所以它的父行是第3行。@Chad Birch,但我是如何从HTML表单中获得该值的呢?好的,我只是问一个问题让你们明白我知道它有点复杂,很抱歉给你们带来不便。正如我在OP中所说的,所有的根消息在HTML表单上都显示为无序列表。现在,用户想要将子节点添加到列表中的任何消息中,她单击该消息。如何获取用户单击的根消息的msg_id,以便将其添加到子消息的父id字段?@Exceptable,如果您将每个节点制作成他们可以单击添加的链接,则每个链接中都有该id。例如,第一个链接类似于add_message.php?parent=1
,第三个链接类似于add_message.php?parent=3
。然后在add_message.php页面上使用$\u GET['parent']
查看传递了什么值(表示单击了哪个链接)。@Chad Birch,这看起来很酷。但是你能给我一个答案吗