#php #mysql #nested #while-loop
#php #mysql #вложенный #цикл while
Вопрос:
Я пытаюсь создать систему подачи для своего веб-сайта, в которой я получил данные из базы данных с помощью mysql_fetch_array
system и создал цикл while для mysql_fetch_array
, и внутри этого цикла я повторил то же самое снова в другом цикле while, но проблема в том, что вложенный цикл while выполняется только один раз и не повторяет строки…. вот код, в котором я использовал некоторую функцию и ООП, но вы поймете, в чем смысл! я подумал об альтернативе, но еще не пробовал vaz, я хочу выйти только таким образом, т. Е. использовать цикл for вместо цикла while, который мог бы сработать…
public function get_feeds_from_my_friends(){
global $Friends;
global $User;
$friend_list = $Friends->create_friend_list_ids();
$sql = "SELECT feeds.id, feeds.user_id, feeds.post, feeds.date FROM feeds WHERE feeds.user_id IN (". $friend_list. ") ORDER BY feeds.id DESC";
$result = mysql_query($sql);
while ($rows = mysql_fetch_array($result)) {
$id = $rows['user_id'];
$dp = $User->user_detail_by_id($id, "dp");
$user_name = $User->full_name_by_id($id);
$post_id = $rows['id'];
$final_result = "<div class="sharedItem">";
$final_result .= "<div class="item">";
$final_result .= "<div class="imageHolder"><img src="". $dp ."" class="profilePicture" /></div>";
$final_result .= "<div class="txtHolder">";
$final_result .= "<div class="username"> " . $user_name . "</div>";
$final_result .= "<div class="userfeed"> " . $rows['post'] . "</div>";
$final_result .= "<div class="details">" . $rows['date'] . "</div>";
$final_result .= "</div></div>";
$final_result .= $this->get_comments_for_feed($post_id);
$final_result .= "</div>";
echo $final_result;
}
}
public function get_comments_for_feed($feed_id){
global $User;
$sql = "SELECT feeds.comments FROM feeds WHERE feeds.id = " . $feed_id . " LIMIT 1";
$result = mysql_query($sql);
$result = mysql_fetch_array($result);
$result = $result['comments'];
$comment_list = get_array_string_from_feild($result);
$sql = "SELECT comment_feed.user_id, comment_feed.comment, comment_feed.date FROM comment_feed ";
$sql .= "WHERE comment_feed.id IN(" . $comment_list . ") ORDER BY comment_feed.date DESC";
$result = mysql_query($sql);
if(empty($result)){ return "";}
else {
while ($rows = mysql_fetch_array($result)) {
$id = $rows['user_id'];
$dp = $User->user_detail_by_id($id, "dp");
$user_name = $User->full_name_by_id($id);
return "<div class="comments"><div class="imageHolder"><img src="". $dp ."" class="profilePicture" /></div>
<div class="txtHolder">
<div class="username"> " . $user_name . "</div>
<div class="userfeed"> " . $rows['comment'] . "</div>
<div class="details">" . $rows['date'] . "</div>
</div></div>";
}
}
}
Ответ №1:
Это потому, что вы используете return
, что останавливает дальнейшее выполнение функции. То, что вы пытаетесь сделать, это
//...
else {
$out = '';
while ($rows = mysql_fetch_array($result)) {
$id = $rows['user_id'];
$dp = $User->user_detail_by_id($id, "dp");
$user_name = $User->full_name_by_id($id);
$out .= "<div class="comments"><div class="imageHolder"><img src="". $dp ."" class="profilePicture" /></div>
<div class="txtHolder">
<div class="username"> " . $user_name . "</div>
<div class="userfeed"> " . $rows['comment'] . "</div>
<div class="details">" . $rows['date'] . "</div>
</div></div>";
}
return $out;
}
Комментарии:
1. я понял вашу точку зрения, но один цикл также не работает, есть ли какая-либо ошибка, которую вы можете найти?
Ответ №2:
ваш внутренний цикл возвращается в течение первой итерации цикла. Вы уверены, что должны выполнять цикл? Если вы уверены, что это всегда будет первая строка, почему бы просто не захватить первую строку?
Комментарии:
1. посмотрите его другую функцию для комментариев, есть много комментариев abt 3 для 1 сообщения … я хочу, чтобы все они были echo запрос в get_comments_for_feed выдает 3 строки, если я запускаю его в консоли mysql, поэтому plob — это цикл while, цикл не зацикливается, он выполняет tht один раз и переходит к основному циклу, а затем изменяется $ post_id, поэтому мне нужен цикл tht для работы
Ответ №3:
Никогда не используйте вложенный цикл while, это не даст ожидаемого результата. Сделайте это следующим образом, как я делал в этом скрипте:
<?php
include('dbconnect.php');
$query = "SELECT * FROM tiles_categories" . " LIMIT 0, 3" ;
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)) { $category_id = $row["cat_id"] ;
echo "<div class='product'>";
echo "<h2 style='padding-bottom:10px; color:#6F0D00;'>". $row['cat_name'] . "</h2>";
gettiles($category_id);
echo"</div>";
}
function gettiles($category_id) {
$tiles_query = "SELECT * FROM tiles_info where cat_id = '".$category_id."'";
$result = mysql_query($tiles_query) or die(mysql_error());
while($row_tiles = mysql_fetch_array($result)) {
echo "<div align='center' style='float:left; width:100px; margin:0px 35px 0px 0px;'>";
echo "</div>";
}
}
?>
Комментарии:
1. Пожалуйста, используйте
mysqli
orPDO
вместо mysql.