находясь внутри другого, находясь в PHP с использованием MySQL

#php #mysql #while-loop

#php #mysql #цикл while

Вопрос:

Мне нужно сделать следующее — получить список всех исполнителей из базы данных и распечатать их на странице. Но помимо этого, мне нужно сделать еще один запрос к таблице «альбомы» и получить альбомы каждого исполнителя и распечатать изображения под описанием каждого исполнителя. Код, который я написал, выглядит следующим образом:

 require('db.php');

$query = "SELECT * FROM artists";
$result = mysql_query($query);

$artist_id = $result[id];
$artist_name = $result[name];
$artist_surname = $result[surname];
$artist_email = $result[email];
$artist_about = $result[about];
$artist_photo = $result[photo];
while(list($artist_id, $artist_name, $artist_surname, $artist_email, $artist_about, $artist_photo) = mysql_fetch_row($result)) :
    print "<div class='row'>";
    print "<div class='artists_left'>";  
    print  "<div class='gallery_cont'><a href='#'><img src='timthumb.php?src=images/artists/$artist_photoamp;w=240amp;h=318' alt='$artist_name' /></a></div>";
    print  "</div>";  
    print "<div class='artists_right'>";
    print   "<div class='artist_title_cont'><span class='model'>Художник:</span><span class='name'>$artist_name $artist_surname</span><span class='mypage'>Личная почта:</span><a href='#' class='mypage'>$artist_email</a></div>";
    print   "<div class='artist_title_cont' style='margin-top:20px;'><span class='name'>$artist_about</span></div>";
    print     "<ul class='artists'>";
    $albums_query = "SELECT id, title_photo, dirname FROM albums WHERE master = $artist_id";
    $albums_result = mysql_query($albums_query);
    $album_id = $albums_result[id];
    $album_photo = $albums_result[title_photo];
    $album_dirname = $albums_result[dirname];
    while(list($album_id, $album_photo, $album_dirname) = mysql_fetch_row($result)) :   
        print "<li><a href='#'><img src='galleries/$album_dirname/$album_photo' alt='image' /></a></li>";
    endwhile;
    print "</ul>";
    print      "<a href='#' class='seemore_portfolio'>все работы мастера amp;></a>";
    print  "</div>";    
    print "</div>";
endwhile;
mysql_close($connect);
  

Внешний запрос работает нормально, а внутренний — нет. Может ли кто-нибудь помочь мне разобраться в этом?

Заранее спасибо.

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

1. Получаете ли вы какую-либо ошибку от второго sql-запроса?

2. Что «не работает» по этому поводу? Вы получаете ошибки, ничего не происходит, вы получаете неправильные результаты? И почему бы вам не использовать a join для выбора данных изображения заранее, вместо того, чтобы запрашивать для каждого альбома?

Ответ №1:

Измените второе $result на $albums_result

Вы также можете рассмотреть возможность написания всего этого следующим образом…

 <? 
        require('db.php');

        $query = "SELECT * FROM artists";
        $result = mysql_query($query);

        while(list($artist_id, $artist_name, $artist_surname, $artist_email, $artist_about, $artist_photo) = mysql_fetch_row($result))
        {

        $li = '';

        $albums_query = "SELECT id, title_photo, dirname FROM albums WHERE master = $artist_id";
        $albums_result = mysql_query($albums_query);

        while(list($album_id, $album_photo, $album_dirname) = mysql_fetch_row($albums_result))
        {
            $li .= "<li><a href='#'><img src='galleries/$album_dirname/$album_photo' alt='image' /></a></li>";
        }

        echo "<div class='row'>
        <div class='artists_left'>  
        <div class='gallery_cont'><a href='#'><img src='timthumb.php?src=images/artists/$artist_photoamp;w=240amp;h=318' alt='$artist_name' /></a></div>
        </div>  
        <div class='artists_right'>
        <div class='artist_title_cont'><span class='model'>Художник:</span><span class='name'>$artist_name $artist_surname</span><span class='mypage'>Личная почта:</span><a href='#' class='mypage'>$artist_email</a></div>
        <div class='artist_title_cont' style='margin-top:20px;'><span class='name'>$artist_about</span></div>
        <ul class='artists'>
        $li
        </ul>
        <a href='#' class='seemore_portfolio'>все работы мастера amp;></a>
        </div>
        </div>";

        }
  

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

1. Кроме того .. к вашему сведению, весь 6-строчный фрагмент кода, где вы присваиваете $artist_id = $result[id] и т. Д. И т. Д., Не нужен. $result[id] не существует, и последующий list() просто заменяет все значения в любом случае