Как сортировать ответы по комментариям в блоге - PullRequest
0 голосов
/ 09 февраля 2019

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

Мне удалось найти комментарии по сообщению, создав внешний ключ для идентификатора сообщения.Я пытался использовать тот же подход, чтобы искать ответы в соответствии с комментариями.То есть я хочу, чтобы каждый ответ располагался под соответствующими комментариями.Я создал внешний ключ для (comments_id) в таблице ответов и связал его с идентификатором таблицы комментариев.Поэтому я использовал запрос ниже, чтобы искать ответы в соответствии с комментарием, который отображал все ответы.Каждое сообщение, имеющее одинаковое количество ответов, отображается после последнего комментария, даже если у них нет такого количества ответов.У меня есть 5 ответов, 3 за 1 комментарий и 1 каждый за 2 других комментария.Но в конце последнего комментария в каждом сообщении будет отображаться 5 ответов.Но когда я изменяю первую строку в моем запросе на: $ r_query = $ get_replies = "SELECT * FROM answers WHERE comments_id = $ id";Ничто не будет смещено.Комментарии.php и post.php представлены ниже.Я решил не удалять какую-либо часть кода, поскольку каждая часть может быть необходимой.

$r_query = $get_replies = "SELECT * FROM replies ";
<?php        
                    $r_query = $get_replies = "SELECT * FROM replies";
                    $r_run = mysqli_query($con,$r_query);
                    if(mysqli_num_rows($r_run) <= 1){

                    ?>                  
                    <div class="comment">
                       <?php
                        while($r_row = mysqli_fetch_array($r_run)){
                            $r_id = $r_row['id'];
                            $r_name = $r_row['name'];
                            $r_username = $r_row['username'];
                            $r_image = $r_row['image'];
                            $r_reply = $r_row['reply'];
                        ?>
                        <div class="row single-comment user-comment">
                            <div class="col-sm-2">
                                <img src="img/<?php echo $r_image; ?>" alt="Profile Picture" class="rounded-circle">
                            </div>
                            <div class="col-sm-10">
                                <h4><?php echo ucfirst($r_name);  ?></h4>
                                <span class="time"><?php echo date('M j, Y', strtotime($r_row['date'])); ?></span>
                                <span class="time"><?php echo 'at '.date('h:i a', strtotime($r_row['date'])); ?></span>
                                <p><?php echo $r_reply; ?></p>
                            </div>
                        </div>
                        <?php }?>
                    </div>
                     <?php  }?>

КОММЕНТАРИИ СТРУКТУРА ТАБЛИЦЫ С ОБРАЗЦОМ ДАННЫХ

СОЗДАТЬ ТАБЛИЦУ comments (id int (11) NOT NULL, date datetime DEFAULT NULL, name varchar (255) NOT NULL, username varchar (255) NOT NULL, post_id int (11) NOT NULL, email varchar (255) NOT NULL, website varchar (255) NOT NULL, image varchar (255) NOT NULL, comment текст NOT NULL, status varchar (255) NOT NULL, posts_id int (11) NOT NULL) ENGINE =CHARSET ПО УМОЛЧАНИЮ InnoDB = latin1;

INSERT INTO comments (id, date, name, username, post_id, email, website, image,comment, status, posts_id) ЗНАЧЕНИЯ (136, '2019-02-08 01:16:17', 'Val Amasiatu', 'compus', 91, 'valamasiatu@gmail.com', 'avidscholars.com.ng ',' Unknown_Member.jpg ',' так держать ',' одобрить ', 91),

- индексы для таблицы comments

ALTER TABLE commentsДОБАВИТЬ ПЕРВИЧНЫЙ КЛЮЧ (id), ДОБАВИТЬ КЛЮЧ comments and posts link (posts_id) ИСПОЛЬЗОВАТЬ BTREE;- AUTO_INCREMENT для сброшенных таблиц

- AUTO_INCREMENT для таблицы comments

ALTER TABLE comments MODIFY id int (11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT = 155;- Ограничения для дамп-таблиц

- Ограничения для таблицы comments

ALTER TABLE comments ДОБАВИТЬ КОНСТРАКТ Foreign key to posts table ИНОСТРАННЫЙ КЛЮЧ (posts_id) ССЫЛКИ posts (id) УДАЛИТЬ КАСКАД ОБНОВИТЬ КАСКАД;COMMIT;

ОТВЕТИТЬ СТРУКТУРУ ТАБЛИЦЫ С ОБРАЗЦОМ ДАННЫХ

СОЗДАТЬ ТАБЛИЦУ replies (id int (11) NOT NULL, date datetime NOT NULL, name varchar (255)NOT NULL, username varchar (255) NOT NULL, email varchar (255) NOT NULL, image varchar (255) NOT NULL, comment текст NOT NULL, status varchar (255) NOT NULL,comments_id int (11) NOT NULL) ENGINE = InnoDB CHARSET ПО УМОЛЧАНИЮ = latin1;- Сброс данных для таблицы replies INSERT INTO replies (id, date, name, username, email, image, comment, status, comments_id) VALUES (163, '2019-02-08 23:02:23', 'Vall Amasia', 'val', 'cgeneral@gmail.com', 'adult-beard-blur-927022.jpg', '1-й ответ',' утверждать ', 151),

- индексы для таблицы replies

ALTER TABLE replies ADD PRIMARY KEY (id), ADD KEY Comment and replies relationship (comments_id);- AUTO_INCREMENT для сброшенных таблиц

- AUTO_INCREMENT для таблицы replies

ALTER TABLE replies MODIFY id int (11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT = 168;- Ограничения для дамп-таблиц - Ограничения для таблицы replies ALTER TABLE replies ДОБАВИТЬ КОНСТРАКТ Foreign key to replies table ИНОСТРАННЫЙ КЛЮЧ (comments_id) ССЫЛКИ comments (id) НА УДАЛИТЬ КАСКАД НА ОБНОВЛЕНИЕ КАСКАД;COMMIT;

СТРУКТУРА И ОБРАЗЕЦ ДАННЫХ ДЛЯ ТАБЛИЦЫ ПОСТОВ

СОЗДАТЬ ТАБЛИЦУ posts (id int (11) НЕ ПУСТО, postDate datetime НЕ ПУСТО,title varchar (255) NOT NULL, author varchar (255) NOT NULL, author_image varchar (255) NOT NULL, image varchar (255) NOT NULL, categories varchar (255) NOT NULL,tags varchar (255) NOT NULL, post_data текст NOT NULL, views int (11) NOT NULL, status varchar (255) NOT NULL) ENGINE = InnoDB CHARSET DEFAULT CHARSET = latin1;- Сброс данных для таблицы posts INSERT INTO posts (id, postDate, title, author, author_image, image, categories, tags, post_data, views, status) VALUES (42, '2019-02-03 11:21:22', 'Что такое Lorem Ipsum?', '1234', 'AvePoint.jpg', 'Administration-balance-blur-272978.jpg ',' tutorials ',' my, my, my ','

Но я не смог найти и разместить этот отсутствующий закрывающий тег div там, где он должен быть.

', 8,' publish '),

- индексы для таблицы posts

ALTER TABLE posts ADD PRIMARY KEY (id);- AUTO_INCREMENT для сброшенных таблиц - AUTO_INCREMENT для таблицы posts ALTER TABLE posts MODIFY id int (11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT = 92;COMMIT;

Мне нужно было сгруппировать ответы в соответствии с их комментариями в любом посте с комментариями, а также с ответами.то есть ответы, приходящие под комментариями.

1 Ответ

0 голосов
/ 09 февраля 2019

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

  1. Во время каждого цикла получите идентификатор комментарияи запросить в таблице ответов ответы, соответствующие этому идентификатору
  2. Когда ответы получены, создайте внутренний цикл и выведите результаты

    $comments = mysqli_query($conn, "SELECT * FROM comments WHERE post_id = $postId)"; while($comment = mysqli_fetch_assoc($comments)){ echo $comment['message']; $replies = mysqli_query($conn, "SELECT * FROM replies WHERE commentId = $comment['comments_id']); while($reply = mysqli_fetch_assoc($replies)){ echo $reply['message']; } }

...