2013-05-29 3 views
0

Я хочу создать базу данных MySQL для проекта, в котором пользователи могут приходить и комментировать другой профиль. У каждого профиля есть уникальный идентификатор, чтобы идентифицировать его, теперь, когда пользователь приходит и комментирует другой профиль, мне нужно будет сохранить идентификатор пользователя лица, сделавшего комментарий, и человека, в профиль которого был сделан комментарий, а также что мне нужно сохранить комментарий в базе данных.Сохранять комментарии на сетевом сайте с MySQL

Поскольку многие пользователи могут комментировать один профиль, мне нужно сохранить все комментарии и пользователей, которые сделали их в одном профиле. Для этого сколько таблиц следует создавать и сколько столбцов они должны иметь? Для этого я собираюсь создать таблицу для имен user_comments и имеет столбец user_id, commenter_id (весь комментатор, который прокомментировал их идентификатор, разделенный запятой), комментарии (затем все комментарии пользователей разделяются запятой).

Будет ли это работать?

+0

Вы на правильном пути, почему бы вам не подумать о хорошей структуре стола и спросить нас, что мы думаем об этом? – Johan

+0

Точно * один * стол «комментарии» с необходимым количеством 3 столбцов, возможно, двух или трех в зависимости от того, какие метаданные вы хотите сохранить. – deceze

+0

Пожалуйста, проверьте его сейчас, я сделал обновление с тем, о чем я думаю. –

ответ

5

Для этого я думал о создании таблицы для имени user_comments и имеет столбец user_id, commenter_id (все комментатор, который комментировал их идентификатор seprated запятой), комментарии (тогда все пользовательские комментариев seprated запятыми)

Божья no! Вы почти есть:

Table comments 
id   INT AUTO_INCREMENT 
recipient_id 
sender_id 
message  TEXT 
[ sent  DATETIME ] 
[ other meta data ] 

магазин один сообщение в message. Создайте один ряд за сообщение. Никогда не храните несколько записей в одном поле, отделенном чем угодно.

+0

Итак, там будет несколько строк с одинаковыми recipient_id и sender_id, и сообщение будет другим .t –

+0

@Siddharth Точно. – deceze

+1

Спасибо. Это делает это совершенно ясным. –

1

я есть profile_comment таблицу:

id, text, profile_user_id, commenter_user_id, created_at 

И в user стол:

id, name, email 

Вы можете увидеть здесь, что первая таблица имеет два внешних ключей в таблице пользователей - один точки владельцу профиля, а остальные указывают владельцу комментария. Вы можете отсортировать их по номеру created_at, чтобы перечислить их так, как в блоге, либо в прямом, либо в обратном порядке.

Теперь, когда вы рендеринга страницы профиля, вы можете получить профиль id из вашей строки запроса:

$profileId = isset($_GET['profile_id']) ? $_GET['profile_id'] : null; 

Оттуда, вы можете добавить его в SQL запрос:

SELECT * FROM profile_comment 
WHERE profile_user_id = :profile_id 
ORDER BY created_at 

Обозначение двоеточия здесь является заполнителем, который вы можете использовать с параметризованным параметрированным запросом, который помогает защитить от SQL-инъекции. Тем не менее, вы можете построить инструкцию в виде строки, если вы будете осторожны, чтобы освободить любой пользовательский ввод, который вы вставляете в него.

+0

Что такое profile_user_id, можем ли мы это сделать без него? –

+1

Спасибо, это поможет. –

+0

'profile_user_id' - это ключ к профилю, который пользователь комментирует. Если вы не записали это, вы могли видеть только, какие пользователи комментировали (через 'commenter_user_id'), но у вас не было записей _where_, которые они прокомментировали. – halfer

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