Как мне составить иерархию сообщений данных?

0

Мне нужно создать иерархию сообщений parent-child. У меня есть два набора сообщений, которые я загружаю и сохраняю в таблице из twitter. Эти сообщения будут сообщениями на уровне корня. Второй набор сообщений - это те, которые пользователь (будет) вводить в качестве дочерних узлов любого из этих сообщений на уровне корневого уровня. Я показываю сообщения уровня корня как неупорядоченный список в моем приложении, например:

  - root_msg1
  - root_msg2
  - root_msg3

Я так много сделал.
Следующий шаг, который мне нужно сделать, это добавить дочерние узлы к этим сообщениям на уровне корневого уровня. Подобно тому, как пользователь мог щелкнуть по любому из этих сообщений на корневом уровне в неупорядоченном списке ИЛИ указать каким-либо корнем node дочерний элемент, который она хочет ввести, и ввести сообщение, которое должно появиться в качестве дочернего сообщения этого сообщения об уровне корня. Как

  - 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

В первую очередь мне нужна помощь, как сохранить эту иерархию в базе данных. Затем, в зависимости от этого, как я могу добавить новый дочерний элемент node в базу данных, чтобы он мог отображаться как дочерний элемент определенного корня.

ИЗМЕНИТЬ

У меня была иерархия для корневых сообщений, которые я сохраняю в таблице точно так же, как и Рождение, с исключением, что я получаю какой-либо parent_id из твиттера, просто msg_id. (На самом деле это основная причина для хранения твитов в базе данных для добавления значение в столбце parent_id!). Но какова основная проблема, с которой я сталкиваюсь: "Как я узнаю, какой node является дочерним по отношению к родительскому", Как я заявил в OP, что все корневые сообщения отображаются как неупорядоченный список в HTML FORM, и пользователь будет выбирать из те элементы списка, в которых она хочет ввести ребенка node, нажав на него. В корневом сообщении (т.е. нажатом на элемент списка) есть msg_id, который хранится в таблице, и это будет родительский идентификатор для дочернего node, но мне нужно получить это, когда пользователь нажимает на root и как я его получаю. Это моя основная проблема, которая застряла у меня. Как только я получу ее, надеюсь, ее так же просто, как вставить новую запись в db. Это моя схема:

|---------+-----------+-------------|
| msg_id  | parent_id |    msg      |
|---------+-----------+-------------|
|       1 | NULL      |   msg1      |
|       2 | NULL      |   msg2      |
|       3 | NULL      |   msg3      |
|         | ?         | msg1_child1 |
|         | ?         | msg1_child2 |
|         | ?         | msg3_child1 |
|---------+-----------+-------------|
Теги:
hierarchical-data

2 ответа

1
Лучший ответ

Сохранение иерархических данных в базе данных - это немного сложная тема, и в основном это зависит от того, как именно вам нужно использовать данные. В общем, очень простой способ сделать это - просто дать каждой строке "родительский идентификатор", который может указывать на записи в одной таблице. Если node является корнем node, этот столбец будет 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 |
|---------+-----------+-------------|

Вы можете найти все корневые узлы, выбрав их в NULL в столбце parent_id, и вы можете найти дочерние узлы друг друга node, выполнив поиск по родительскому идентификатору.

  • 0
    @Chad Birch, у меня было все корневое сообщение с той же схемой в таблице, как вы сделали здесь. Но основная проблема, с которой я сталкиваюсь, заключается в том, «как мне узнать, какой узел является дочерним по отношению к какому-либо из родителей». Как я уже говорил в OP, пользователь выберет в HTML-форме корневое сообщение, в которое он хочет ввести дочерний узел, либо нажав на это или любой другой способ, который я не знаю. Это моя основная проблема, которая застряла у меня.
  • 0
    @XCeptable: я не знаю, что вы имеете в виду. Значение в столбце parent_id указывает, какой из них является родительским. Строки № 4 и № 5 имеют 1 в этом столбце, что означает, что их родителем является строка № 1. Строка № 6 имеет 3 , поэтому ее родителем является строка № 3.
Показать ещё 6 комментариев
0

Если я правильно понимаю, что вы задаетесь вопросом о правиле html? вы просто создаете еще один неупорядоченный список после того, как он присваивает ему.

для части mysql вы можете использовать Joins для размещения внутри одного запроса. чтобы быть более конкретным, что я имел в виду, так это то, что вы храните дочерние сообщения в разных таблицы и родителей в отдельном, и присоединиться к ним через общий знаменатель которые могут быть установлены через GET/POST/SESSION или все, что вы считаете нужным использовать.

С уважением

  • 0
    на самом деле это моя основная проблема, как связать ребенка с соответствующим родителем, с которым пользователь хочет, чтобы это был ребенок. Я не знаю, как я могу получить ввод или что-то, что можно использовать для сопоставления, когда пользователь щелкает по любому корневому сообщению в списке. По вашему предложению у меня уже есть все корневые сообщения в таблице. Теперь, когда я получу ребенка от другого, как я узнаю, какое сообщение является дочерним, от какого корня ??
  • 0
    Твиттер дает вам идентификатор родителя для сообщения?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню