Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод -2 и +2 от определенного значения.
 
 автор: Aidaho   (18.09.2009 в 07:36)   письмо автору
 
 

Добрый день. Возникла такая проблема, хочу сделать вывод данных но не всех, т.е. берем например из базы 6 строк, выводим только 3, а остальные по бокам, т.е. являются ссылками, что бы можно было их потом открыть в полный размер.
Вот не могу додуматься, как это можно сделать? может кто поможет....
Я хочу сделать фото галерею и что бы вывод был большой фотографии, а снизу превьюшки по которым можно щелкать и открывать их в полный размер.

  Ответить  
 
 автор: cheops   (18.09.2009 в 08:42)   письмо автору
 
   для: Aidaho   (18.09.2009 в 07:36)
 

Не очень понятно, что вызывает сложность? Разметка страницы? Или что-то другое?

  Ответить  
 
 автор: Aidaho   (18.09.2009 в 08:55)   письмо автору
 
   для: cheops   (18.09.2009 в 08:42)
 

вызывает сложность сам алгоритм, т.е. если я щелкаю на первую строчку, то должны появится ссылки на 2 и 3-ю строчки. А если я например щелкаю на 3-ю, то появляются ссылки на 1,2 и 4,5 строчки, что то вроде постраничной навигации, только с фотографиями...

  Ответить  
 
 автор: Alexey_Tihonenko   (18.09.2009 в 08:50)   письмо автору
 
   для: Aidaho   (18.09.2009 в 07:36)
 

Могу предложить вот такой вариант вывода первых трех строчек одним методом и вывод остальных другим методом
$db = mysql_connect(.........);
$result = mysql_query(.........);

//Цикл, в котором выводим первые три строчки

$i = 0;
while($i < 3)
{
  $i++;
  $myrow = mysql_fetch_array($result);
  ......................
}

//Цикл, в котором выводим остальные строчки

while($myrow  = mysql_fetch_array($result))
{
  ..........................
}

  Ответить  
 
 автор: Aidaho   (18.09.2009 в 08:56)   письмо автору
 
   для: Alexey_Tihonenko   (18.09.2009 в 08:50)
 

а если мне надо будет например вывести не первые 3, а начиная с 10-ой?

  Ответить  
 
 автор: temp   (18.09.2009 в 09:05)
 
   для: Aidaho   (18.09.2009 в 08:56)
 

Тогда в запросе к бд использовать конструкцию LIMIT с двумя параметрами

  Ответить  
 
 автор: Aidaho   (18.09.2009 в 09:15)   письмо автору
 
   для: temp   (18.09.2009 в 09:05)
 

это понятно, но как мне определить барьеры? дело в том, что в базе есть значения с разных категорий выборка происходит по id категории...

что бы было понятней, сейчас все это выглядит так:

$q = "select id_album,foto,descrip,date from gal_foto where id='$_GET[id]'";
        $res = mysql_query($q) or die(mysql_error());

        echo "<div class=content>";

        $fotoBig = mysql_fetch_array($res);

        echo "<center><img src=\"$fotoBig[foto]\" alt=\"$bigFoto[4]\" class=\"foto\"></center><br />
        $fotoBig[descrip]<br /><br />
        Добавлена&nbsp;$fotoBig[date]<hr /><br />";

        $qu = "select count(id) from gal_foto where id_album='$fotoBig[id_album]'";

        $resu = mysql_query($qu) or die(mysql_error());
        $countId = mysql_fetch_array($resu);

        $q = "select * from gal_foto where id_album='$fotoBig[id_album]' limit $countId[0]";

        $res = mysql_query($q) or die(mysql_error());
        while($alb = mysql_fetch_array($res)) {
                echo "<a href=http://$_SERVER[HTTP_HOST]$_SERVER[PHP_SELF]?id=$alb[Id] title=\"Просмотреть\"><img src=\"$alb[prev]\" alt=\"$alb[descrip]\" class=\"foto\"></a>
                &nbsp;&nbsp;&nbsp;";
                }
        echo "</div>";

        }

  Ответить  
 
 автор: Trianon   (18.09.2009 в 11:48)   письмо автору
 
   для: Aidaho   (18.09.2009 в 09:15)
 

limit $countId[0] у Вас с какой целью приделан?

вместо него разумнее как раз барьеры поставить.

  Ответить  
 
 автор: Alexey_Tihonenko   (18.09.2009 в 09:13)   письмо автору
 
   для: Aidaho   (18.09.2009 в 08:56)
 

А те строчки, что до 10-й вам в этом случаи будут нужны или будут нужны только те, что после 10-й?

  Ответить  
 
 автор: Aidaho   (18.09.2009 в 09:16)   письмо автору
 
   для: Alexey_Tihonenko   (18.09.2009 в 09:13)
 

да, будут нужны, предположительно около 2-4 строк

  Ответить  
 
 автор: Alexey_Tihonenko   (18.09.2009 в 10:06)   письмо автору
 
   для: Aidaho   (18.09.2009 в 09:16)
 

Тогда можно вот как сделать:

$db = mysql_connect(.........);
mysql_select_db(...............);


// Выводим первую тройку миниатюр 

$result = mysql_query("SELECT * FROM foto WHERE id > ($_GET['id'] -4 ) and id < $_GET['id'] ");
while($myrow = mysql_fetch_array($result))
{
  //Собственно вывод миниатюр
  .........................................
}


//Выводим большую картинку

$result = mysql_query("SELECT * FROM foto WHERE id = $_GET['id']");
$myrow = mysql_fetch_array($result);

//Собственно вывод картинки
...................................................


// Выводим вторую тройку миниатюр 

$result = mysql_query("SELECT * FROM foto WHERE id > $_GET['id']  and id < ($_GET['id'] + 4) ");
while($myrow = mysql_fetch_array($result))
{
  //Собственно вывод миниатюр
  .........................................
}

  Ответить  
 
 автор: Aidaho   (18.09.2009 в 10:47)   письмо автору
 
   для: Alexey_Tihonenko   (18.09.2009 в 10:06)
 

не подходит.. потому что id картинок идет не по прядку.... т.е. картинки с id 22 и 23 могут быть в разных альбомах...

  Ответить  
 
 автор: Alexey_Tihonenko   (18.09.2009 в 10:55)   письмо автору
 
   для: Aidaho   (18.09.2009 в 10:47)
 

Тогда опишите по какому принципу должна формироваться лента из картинок.
У вас все картинки находятся в одной таблице?
А я пока съезжу на обед)

  Ответить  
 
 автор: Aidaho   (18.09.2009 в 11:51)   письмо автору
 
   для: Alexey_Tihonenko   (18.09.2009 в 10:55)
 

да, все картинки в одной таблице
структура таблицы такая:
id-фотографии, айди альбома, фото, превью, описание, дата

вот и из нее надо как то выдирать...

приятного аппетита ))

  Ответить  
 
 автор: Alexey_Tihonenko   (18.09.2009 в 13:17)   письмо автору
 
   для: Aidaho   (18.09.2009 в 11:51)
 

Спасибо))
Тогда модифицируем последний вариант:

$db = mysql_connect(.........);
mysql_select_db(...............);


// Выводим первую тройку миниатюр из нужно альбома

$result  = mysql_query("SELECT * FROM foto WHERE id < $_GET['id'] and album_id = $_GET['album_id'] ODRED BY id DESC LIMIT 3");
while($myrow = mysql_fetch_array($result))
{
  //Собственно вывод миниатюр
  .........................................
}


//Выводим большую картинку

$result = mysql_query("SELECT * FROM foto WHERE id = $_GET['id']");
$myrow = mysql_fetch_array($result);

//Собственно вывод картинки
...................................................


// Выводим вторую тройку миниатюр из нужного альбома

$result = mysql_query("SELECT * FROM foto WHERE id > $_GET['id'] and album_id = $_GET['album_id'] ODRED BY id LIMIT 3");
while($myrow = mysql_fetch_array($result))
{
  //Собственно вывод миниатюр
  .........................................
}

  Ответить  
 
 автор: Aidaho   (18.09.2009 в 13:43)   письмо автору
 
   для: Alexey_Tihonenko   (18.09.2009 в 13:17)
 

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

  Ответить  
 
 автор: Aidaho   (18.09.2009 в 16:12)   письмо автору
 
   для: Alexey_Tihonenko   (18.09.2009 в 13:17)
 

в общем решил я проблему... вот так:

$q = "select id_album,foto,descrip,date from gal_foto where id='$_GET[id]'";
        $res = mysql_query($q) or die(mysql_error());

        $fotoBig = mysql_fetch_array($res);


        ... большая картинка

//вот это сделал, что бы лимит правильно выводил
        $quer = mysql_query("SELECT count(id) FROM gal_foto WHERE Id < '$_GET[id]' and id_album = '$fotoBig[id_album]'");
        $res = mysql_fetch_row($quer);
        $a = $res['0'] -2;

        $q = "SELECT * FROM gal_foto WHERE Id < '$_GET[id]' and id_album = '$fotoBig[id_album]' LIMIT $a,2";

        $res = mysql_query($q) or die(mysql_error());
        while($alb = mysql_fetch_array($res)) {


              ... вывод левой части...


                }

        $q = "SELECT * FROM gal_foto WHERE Id >= '$_GET[id]' and id_album = '$fotoBig[id_album]' ORDER BY id LIMIT 3";

        $res = mysql_query($q) or die(mysql_error());
        while($alb = mysql_fetch_array($res)) {


                ... вывод правой части картинок...
                }

  Ответить  
 
 автор: alexey_tihonenko   (19.09.2009 в 12:38)   письмо автору
 
   для: Aidaho   (18.09.2009 в 16:12)
 

Рад, что у вас получилось решить проблему!
На будущее совет: Описывайте поподробнее свою проблему(задачу), иначе тяжело понять, какая конкретная задача перед вами стоит и что именно не получается)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования