#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
, что это целое число без знака.