2015-02-14 4 views
0

На данный момент я создаю систему блога с php. Администратор может создавать x сообщений, и в каждом столбце должна быть функция комментария. Как я могу реализовать что-то подобное? Я не знаю структуру базы данных, потому что это должно быть много таблиц (для каждого сообщения (?)). Возможно, у кого-то из вас есть хорошая ссылка. Я уже обыскал, но ничего не нашел для своей проблемы.Структура PHP базы данных комментариев

ответ

0

Вам не нужно много таблиц. Вы могли бы иметь таблицу для сообщений, как это:

id  INT(10) 
title TEXT 
content TEXT 

И таблица для комментариев, как это:

id  INT(10) 
postId INT(10) // this links to the column post.id 
content TEXT 

Конечно, вы можете добавить дополнительные столбцы для обеих таблиц, если это необходимо, пример для добавления временных меток и т. д.

Теперь, когда у вас есть сообщение с идентификатором 7, вы убедитесь, что все комментарии к этому сообщению получают postId 7. Таким образом, при отображении сообщения 7 на вашем веб-сайте вы можете найдите все строки в таблице комментариев с postId = 7 и покажите точно те комментарии, которые повторно связан с этой записью.

Я упростил этот пример. Для оптимизации таблиц вы можете добавить индексы, первичные ключи и т. Д.

+0

ahh, поэтому я создаю один стол для всех комментариев? – Skeptar

+0

@Skeptar точно, с одним столбцом, в котором говорится, кому принадлежит комментарий. – Keelan

+0

Спасибо, человек, ты мне очень помог! :)! Я долго думал, как я могу понять, что ^^ Мой последний вопрос: профессиональный сайт, поступить так же? – Skeptar

0

@Skeptar, существует множество способов, которыми вы можете это достичь. Позвольте мне предложить его вам.

Users table: (very obvious) 
Columns: user_id (INTEGER(n) PRIMARY KEY), username (VARCHAR(n)), password (VARCHAR(32) for md5), level (INTEGER Example: 1 for admin, 3 for regular user) 

Posts: 
Columns: post_id (INTEGER(n) PRIMARY KEY), post_title (VARCHAR(n)), post (TEXT), user_id (INTEGER(n)) 

Comments: 
Columns: comment_id (INTEGER(n)), comment(TEXT), post_id,(INTEGER FOREIGN KEY REFERENCES post(post_ID)) user_id(INTEGER(n) FOREIGN KEY REFERENCES users(user_id)) 

Теперь, я считаю, что у вас есть средство, позволяющее зарегистрировать в вашей системе оба уровня (администратора и обычных) пользователей.

При вставке вы берете заголовок сообщения и фактическое сообщение и с помощью некоторого механизма идентификации пользователя, такого как SESSIONS, вы получаете user_id и вставляете их в стол сообщения.

Затем для каждого комментария при вставке вы получаете post_id сообщения, по которому пользователь комментирует, и вставляют его в таблицу комментариев вместе с комментарием и user_id.

Если вы хотите получить все сообщения, это довольно просто.

Если вы хотите получать все комментарии для конкретного поста, вы берете на себя post_id этой должности в таблице комментариев, как, например:

SELECT * FROM comments C, posts P WHERE C.post_id = C.post_id; 

Поскольку вы вставили user_id против каждого поста и комментариев, так же, вы можете получить соответствующую информацию о пользователе для каждого комментария, как например:

SELECT U.username FROM comments C, users U Where C.user_id = U.user_id 

Помните, что это только, чтобы дать вам и идея, и не должны быть приняты в качестве полного рабочего раствора. Я написал это с головы и мог иметь некоторые ошибки. Кроме того, где я указал в скобке n (INTEGER (n)), это означает, что вам нужно заменить n на нужный размер столбцов. Надеюсь, поможет.

+0

Ничего себе, этот ответ тоже потрясающий! :) Спасибо чувак ! :) – Skeptar

+0

Я рад, что смогу помочь. –

Смежные вопросы