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

Runapa

Постоялец
Регистрация
30 Окт 2010
Сообщения
63
Реакции
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>";
}

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

Что тут можно сделать ?
 
вставь нужную строку в цикл с условием:
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>";
}
 
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);
 
вставь нужную строку в цикл с условием:
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>";
}


Спасибо, то что нужно. А можете объяснить как это работает ?
 
Цикл 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 ...
 
Очень доходчиво. Спасибо.
 
Назад
Сверху