Таблица MySQL для комментариев

#php #mysql

#php #mysql

Вопрос:

Это очень любительский вопрос (не оценивайте меня за это), но как бы мне создать столбец

для комментариев

содержащая идентификатор записи, которой они назначены?

Например, если бы я должен был опубликовать комментарий к сообщению # 48, как бы я настроил это в MySQL, чтобы

комментарий отображается в сообщении # 48, а не во всех сообщениях?

Заранее спасибо:)

Комментарии:

1. Вы не можете быть оценены ниже, вы на уровне 1.

2. @ypercube в любом случае, я пытался быть смешным, лол, ты знаешь, как бы я это настроил?

3. Как выглядит ваша posts таблица?

4. Добавьте в описание таблицы, которые у вас уже есть (по крайней мере, те, которые вы считаете относительными, такие как post и user ) и их поля.

5. @a1ex07 она довольно простая, состоит из 5 столбцов; идентификатор, заголовок, комментарий, пользователь, ключевые слова. Какой столбец я должен был бы добавить?

Ответ №1:

Вы создаете не столбец для комментариев, а новую таблицу.

просто,

 table Post
id,
content

table Comment
id,
content,
post_id
  

Где post_id — это ссылка на идентификатор записи.

Комментарии:

1. Я знаю, но как я смогу отображать комментарии к конкретному сообщению, для которого оно предназначено?

2. @Мохамед Юсуф. Ну, это зависит от того, как вы это сделали. Если у вас есть конкретный пост, вы просто делаете select * from Comment WHERE post_id = 'the post id'

3. допустим, они были на странице для поста # 50. Как бы я мог заставить пользователей публиковать комментарии только для публикации 50

4. @Мохамед Юсуф. Затем вы просто вставляете новую строку в таблицу комментариев, где вы устанавливаете post_id в качестве идентификатора записи, на которую пользователь разместил. Для этого необходимо включить идентификатор записи в скрытое поле (если вы используете формы).

Ответ №2:

Это отношение «один ко многим» (в одном сообщении может быть много комментариев), поэтому вам понадобится новая таблица для него.

 comments_tbl
 - comment_id  |   int(11) auto_increment
 - post_id     |   int(11) (FK to post table)
 - author_id   |   int(11) (FK to the user table OR author_name)
 - date        |   datetime
 - comment     |   text
  

И если вы хотите иметь возможность отмечать и модерировать комментарии, вы можете включить что-то вроде:

  - date_approved  |  datetime
 - flagged        |  int(1)
  

Затем ваш SQL для отображения комментариев к сообщению будет выглядеть следующим образом

 mysql_query("SELECT comment_id, author_name, comment FROM comments_tbl WHERE post_id = '$postid' AND date_approved IS NOT NULL AND flagged = '0'");
  

Чтобы добавить комментарий в базу данных:

 mysql_query("INSERT INTO comments (post_id, author_id, date, comment) VALUES ('$postid', '$author_id', '$date', '$comment');
  

Комментарии:

1. Нет проблем, просто заметил ваш комментарий выше о добавлении в таблицу демонстрационной ВСТАВКИ .. пожалуйста, не забудьте очистить переменные перед вставкой с помощью mysql_real_escape_string или даже лучше использовать подготовленные инструкции, такие как pdo и mysqli

Ответ №3:

Первое, что вам нужно сделать в PHP-коде, это сохранить в переменной ID записи, которой присвоен комментарий (например $postId . Затем вы можете вставить комментарий в новую таблицу примерно так (я не пишу структуру таблицы, надеюсь, вы увидите это из запроса):

 mysql_query("INSERT INTO comments (id_post, text) VALUES ('".$postId."', 'Text of the comment'");
  

Когда вы захотите ее выбрать, вы будете использовать этот запрос:

 mysql_query("SELECT text FROM comments WHERE id_post = '".$postId."'");
  

Кстати, id_post столбец называется foreign key, и для него должен быть определен индекс.

Ответ №4:

Если у вас есть таблица для ваших сообщений, вам понадобится новая таблица для ваших комментариев. Чтобы связать комментарии с сообщениями, просто создайте post_id столбец в вашей таблице комментариев.

 comments
- comment_id int(8) Auto_Increment 
- post_id int(8)
- comment_author varchar(255)
- comment_content text()
  

post_id должен быть идентификатор записи, с которой вы связываете комментарий, где каждый комментарий получает свою собственную строку в этой таблице. Если ваши авторы могут быть связаны с идентификатором, который лучше, просто измените его varchar(255) на int(8) или что-то еще, что соответствует остальной части вашего дизайна.

Ответ №5:

Вам нужно что-то вроде

 CREATE TABLE `comments` (id int unsigned not null auto_increment PRIMARY KEY,
post_id int unsigned not NULL,
// other fields, post_date, post_text, etc
FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE ON UPDATE CASCADE)
  

Примечание: FOREIGN KEY поддерживаются INNODB движком, поэтому, если ваша таблица есть MyISAM , она вам не нужна. post_id должен иметь тот же тип, что и первичный ключ в posts — я предположил post.id , что это целое число без знака.