foreach внутри foreach объединить результаты двух запросов MySQL

0

мои запросы дают два результата:

Затем я попытался получить результаты с двумя массивами с двумя циклами

while ($rowPost = mysqli_fetch_assoc($grabPostsQuery)) { 
  $posts[] = $rowPost;            
}
while ($rowComment = mysqli_fetch_assoc($grabCommentsQuery)) {
   $comments[] = $rowComment;
}

$grabPostsQuery = "SELECT * FROM posts ORDER BY postDate DESC";
$grabPostsQuery = mysqli_query($link, $grabPostsQuery);
$grabCommentsQuery = "SELECT * FROM comments ORDER BY commentDate DESC";
$grabCommentsQuery = mysqli_query($link, $grabCommentsQuery);

Затем я сделал вложенный foreach примерно так:

foreach($posts as $post) {
   foreach($comments as $comment) {
       echo $post['postContent']."<br>";
       echo $comment['commentContent']."<br>";
   }
}

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

Любая помощь, пожалуйста?

  • 0
    Почему бы не использовать JOIN?
  • 0
    КАК ПРИСОЕДИНЯТЬСЯ к отображению результатов, неуместны, потому что порядок не такой, как ожидалось
Показать ещё 9 комментариев
Теги:
foreach

3 ответа

0
Лучший ответ

Есть два способа сделать это. Один с запросом на соединение (к сожалению, я не знаю структуру вашей базы данных, и при этом у меня недостаточно времени); или вы можете поместить запрос комментариев в цикл foreach.

пример

$grabPostsQuery = "SELECT * FROM posts ORDER BY postDate DESC";
$grabPostsQuery = mysqli_query($link, $grabPostsQuery);
while ($rowPost = mysqli_fetch_assoc($grabPostsQuery)) { 
   $post_id = $rowPost['id'];
  //other variables go in here

   $grabCommentsQuery = "SELECT * FROM comments WHERE comment_id = '$post_id' ORDER BY commentDate DESC";
   $grabCommentsQuery = mysqli_query($link, $grabCommentsQuery);  
   while ($rowComment = mysqli_fetch_assoc($grabCommentsQuery)) {
        //List out the returned fields
    }
}

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

Извините, если этот ответ кажется немного поспешным

0

Просто запустите свои циклы по отдельности, а не один внутри другого...:

foreach($posts as $post) {
  echo $post['postContent']."<br>";
}
foreach($comments as $comment) {
  echo $comment['commentContent']."<br>";
}
  • 0
    Мне нужно, чтобы они были объединены. Как мне это сделать?
  • 0
    Что именно вы подразумеваете под комбинированным? Судя по отображаемым запросам, таблица posts и таблица comments могут быть совершенно не связаны ... Я полагаю, вам следует немного реорганизовать свой SQL ... :-) Для начала найдите, какие поля связывают две таблицы (если есть) ...
Показать ещё 3 комментария
0

Если оба ваших массива имеют одинаковую длину, вы можете сделать это следующим образом:

<?php

for ($i = 0; $i < count($posts); $i++) {
    echo $posts[$i] . '<br />' . $comments[$i] . '<br />';
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню