Многократное использование результата запроса.

Тема в разделе "Как сделать...", создана пользователем Runapa, 13 янв 2012.

  1. Runapa

    Runapa Постоялец

    Регистр.:
    30 окт 2010
    Сообщения:
    64
    Симпатии:
    5
    У меня вот возник вопрос.

    Я делаю запрос в бд mysql

    PHP:
    $sql "SELECT * FROM gallery WHERE album = '$album'";
    $gallery_all mysql_query($sql) or die(mysql_error() ."<br/>"$sql);
    Результат вывожу в цикл

    PHP:
    while ($row mysql_fetch_assoc($gallery_all))
    {
    echo 
    "<p>".$row['link']."</p>";
    }
    А как использовать результат этого же запроса за пределами цикла ?

    Потому что если я делаю вывод в массив раньше цикла, то в цикл идёт. Если позже, то наоборот.

    Просто мне в файле с циклом, из той же таблицы, надо вывести еще одно поле, но за пределами цикла.

    примерно так -


    PHP:
    echo "<H3 class='h3_main'>".$row['album']."</H3>";
    while (
    $row mysql_fetch_assoc($gallery_all))
    {
    echo 
    "<p>".$row['link']."</p>";
    }
    Естественно ничего не выводится, и кроме того как сделать еще один запрос к той же таблице, но вывести его в другой массив, моих знаний не хватает.

    Что тут можно сделать ?
     
  2. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    вставь нужную строку в цикл с условием:
    PHP:
    $r ="";
    while (
    $row mysql_fetch_assoc($gallery_all))
    {
    if(
    $row['album']!=$r){
    echo 
    "<H3 class='h3_main'>".$row['album']."</H3>"
    $r=$row['album'];
    }
    echo 
    "<p>".$row['link']."</p>";
    }
     
  3. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    363
    Симпатии:
    117
    PHP:
    $sql "SELECT * FROM gallery WHERE album = '$album'";
    $gallery_all mysql_query($sql) or die(mysql_error() ."<br/>"$sql);
    $resultArray = array();
     
    while((
    $resultArray[] = mysql_fetch_assoc$gallery_all  )) || array_pop($resultArray));
     
     
    foreach(  
    $resultArray  as $row ){
    echo 
    "<p>".$row['link']."</p>";
    }
     
    ///
    //.....................
    //
    echo "<H3 class='h3_main'>"$resultArray[count$resultArray )-1)]['album']."</H3>";
    foreach(  
    $resultArray  as $row ){
    echo 
    "<p>".$row['link']."</p>";
    }
     
     

    ну или перед 2 циклом повторить строчку

    PHP:
      $gallery_all mysql_query($sql) or die(mysql_error() ."<br/>"$sql);  
     
    Runapa нравится это.
  4. Runapa

    Runapa Постоялец

    Регистр.:
    30 окт 2010
    Сообщения:
    64
    Симпатии:
    5

    Спасибо, то что нужно. А можете объяснить как это работает ?
     
  5. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    Цикл while перебирает построчно выборку данных из базы, в каждой строке есть данные с ключом album . В Вашем случае этот ключ одинаковый для всех строк, так как вы сделали запрос в БД "выбрать все строки, содержащие в поле album определенное значение" и так как это значение известно еще до выборки из базы, то его можно вынести за пределы цикла while:
    PHP:
    echo "<H3 class='h3_main'>".$album"</H3>";
    while (
    $row mysql_fetch_assoc($gallery_all))
    {
    echo 
    "<p>".$row['link']."</p>";
    }
    Я Вам предложил код для случая, когда нужно сделать выборку всех композиций из базы данных, группируя их по альбомам и указывая название альбома в начале каждой группы: $sql = "SELECT * FROM gallery ORDER BY album ";
    В таком случае все данные, вытянутые из базы, будут выглядеть примерно так:
    id | link | album
    3 | bla-bla| 1
    5 |labla | 1
    2 | jdsfsd | 4
    10 | sger | 4
    и т.д. то есть строки с одинаковыми альбомами будут идти подряд
    1) Для начала инициируем пустую переменную, с которой будем дальше сравнивать название альбома $r="";
    2) Далее запускаем цикл while который построчно обработает запрос из базы данных,
    в теле цикла:
    3) Сравниваем значение поля album в обрабатываемой строке с нашей переменной: if($row[album]!=$r)
    4) Если данные не совпадают, то выводим название альбома: echo "<H3 class='h3_main'>".$row['album']."</H3>";
    и в нашу переменную записываем данные из поля album для того, чтобы при обработке следующей строки из БД, название альбома не выводилось.
    Если данные совпали, то название альбома не выводим и переменную не перезаписываем.
    5) Ну и безусловно выводим ссылку на композицию: echo "<p>".$row['link']."</p>";
    Цикл переходит к обработке следующей строки, то есть к пункту номер 3 ...
     
  6. Runapa

    Runapa Постоялец

    Регистр.:
    30 окт 2010
    Сообщения:
    64
    Симпатии:
    5
    Очень доходчиво. Спасибо.