У меня есть база. В ней ключевое поле "id" В каждой стороке содержится информация о местонахождении фотки(имя фото и каталог) т.е.
id | foto
1 | 345.jpeg
2 | 34.jpeg
3 | 325.jpeg
5 | 3225.jpeg
12 | 7955.jpeg
14 | 34t5.jpeg
17 | wry5.jpeg
Допустим я нахожусь на странице id = 5
Как мне сделать ссылки на предыдущую страницу (id = 3) и следующую страницу (id = 12)
И если я нахожусь на странице id = 17 ссылка на предыдущую страницу (id = 14) и следующую страницу (id = 1)
Подскажите алгоритм расчета данных для данных ссылок
Спустя 10 минут, 25 секунд (2.07.2011 - 16:54) waldicom написал(а):
Насчет соседних, то это просто: выбрать элемент > текущего LIMIT 1, так же и для предыдущего, только со знаком <
А насчет ротации. Одним запросом будет не просто (громоздко). Так что или изгаляться или переложить на php
А насчет ротации. Одним запросом будет не просто (громоздко). Так что или изгаляться или переложить на php
Спустя 13 минут, 21 секунда (2.07.2011 - 17:07) kent666 написал(а):
я думал при помощи запросов
Определить мах id
текущая страница = id
предыдущая id id-- в цикле пока не найдет существ id
след id id++ в цикле
Если тек id=мах id
тек id id-- в цикле
предыдущая id min id
Но это постоянное обращение к базе будет сильно тупить сервер!
Надо как то через SQL запрос
Определить мах id
текущая страница = id
предыдущая id id-- в цикле пока не найдет существ id
след id id++ в цикле
Если тек id=мах id
тек id id-- в цикле
предыдущая id min id
Но это постоянное обращение к базе будет сильно тупить сервер!
Надо как то через SQL запрос
Спустя 7 минут, 16 секунд (2.07.2011 - 17:14) kent666 написал(а):
А как будет выглядеть sql запрос
Цитата |
выбрать элемент > текущего LIMIT 1 |
Спустя 4 минуты, 32 секунды (2.07.2011 - 17:19) waldicom написал(а):
примерно так:
$query = "select id from `table` where id > " . (int)$currentId . " LIMIT 1";
Спустя 1 минута, 47 секунд (2.07.2011 - 17:21) kent666 написал(а):
Щас попробуем пошаманить)
Спустя 42 минуты, 16 секунд (2.07.2011 - 18:03) DySprozin написал(а):
Не понимаю, зачем так извращаться? (;
Можно ведь полностью переложить на пхп:
Добавлено: упс, забыл break поставить )
Можно ведь полностью переложить на пхп:
$id = $_GET['id'];
$link = mysql_query('SELECT * FROM `table` SORT BY `id`');
$prev = '';
$next = '';
$now = '';
$ch = 0;
while($mas[$ch] = mysql_fetch_assoc($link)) {
if($mas[$ch]['id'] == $id && $ch > 0) {
$prev = $mas[$ch - 1]['foto'];
$now = $mas[$ch]['foto'];
$tmp = mysql_fetch_assoc($link);
if ($tmp) $next = $tmp['foto'];
else $next = $mas[0]['foto'];
break;
}
elseif ($mas[$ch]['id'] == $id && $ch == 0) {
$now = $mas[0]['foto'];
$tmp = mysql_fetch_assoc($link);
if ($tmp) $next = $tmp['foto'];
else $next = '';
}
}
if (!empty($now) && !empty($next) && empty($prev)) $prev = $mas[count($mas) - 1]['foto'];
Добавлено: упс, забыл break поставить )
Спустя 3 минуты, 55 секунд (2.07.2011 - 18:07) waldicom написал(а):
Цитата (DySprozin @ 2.07.2011 - 16:03) |
Не понимаю, зачем так извращаться? (; |
Поговаривают, что можно много переложить. Просто тупо select * from `table`, а там уже на php остальное.
Для каждого дела - правильный инструмент. Это простая истина сэкономит много времени и нервов.
Спустя 1 минута, 46 секунд (2.07.2011 - 18:09) DySprozin написал(а):
waldicom
зато всего одно обращение к БД (;
зато всего одно обращение к БД (;
Спустя 1 час, 28 минут, 14 секунд (2.07.2011 - 19:37) kent666 написал(а):
блин что то не получается. Ссылки работают неправильно!
/**
* Generation of image
* Генерациия изображения
*/
if($GET['photo']=="new"&& !isset($_COOKIE['galley']))
{
$res=mysqlQuery("SELECT * FROM `". SVV_DBPREFIX ."gallery`
WHERE `public` = 1 AND
`id` = (SELECT MAX(`id`) FROM `". SVV_DBPREFIX ."gallery`)"
);
if(mysql_num_rows($res) > 0)
{
$row = htmlChars(mysql_fetch_assoc($res));
}
setcookie('galley', $row[`id`], time() + 3600 * 24 * 30, '/');
}
elseif($GET['photo']=="new"&&isset($_COOKIE['galley']))
{
$res=mysqlQuery("SELECT * FROM `". SVV_DBPREFIX ."gallery`
WHERE `public` = 1 AND `id`=".$_COOKIE['galley']
);
}
else
{
$res=mysqlQuery("SELECT * FROM `". SVV_DBPREFIX ."gallery`
WHERE `public` = 1 AND `id`=".$GET['photo']
);
setcookie('galley', $GET['photo'], time() + 3600 * 24 * 30, '/');
}
if(mysql_num_rows($res) > 0)
{
$row = htmlChars(mysql_fetch_assoc($res));
}
$photo = !empty($row['foto'])?"<img alt='' height='238' src='".SVV_HOST."setup/gallery/".$row['foto']."' />":"Нет фото";
/**
* Generation left links
* Генерациия левой ссылки
*/
$res=mysqlQuery("SELECT `id` FROM `". SVV_DBPREFIX ."gallery`
WHERE `id` <".(int)$_COOKIE['galley']." LIMIT 1
");
if(mysql_num_rows($res) > 0)
{
$row = htmlChars(mysql_fetch_assoc($res));
}
$left_photo=$row['id'];
/**
* Generation right links
* Генерациия правой ссылки
*/
$res=mysqlQuery("SELECT `id` FROM `". SVV_DBPREFIX ."gallery`
WHERE `id` >".(int)$_COOKIE['galley']." LIMIT 1
");
if(mysql_num_rows($res) > 0)
{
$row = htmlChars(mysql_fetch_assoc($res));
}
$right_photo=$row['id'];
Спустя 1 минута, 51 секунда (2.07.2011 - 19:39) kent666 написал(а):
какая то проблема в куки
Спустя 3 часа, 42 минуты, 2 секунды (2.07.2011 - 23:21) kent666 написал(а):
Я немного переделал скрипт что бы было меньше запросов к базе
Но проблема в том что куки перезаписываются через раз!!! Что за фигня!!!
/**
* Generation of image
* Генерациия изображения
*/
if($GET['photo']=="new"&&!isset($_COOKIE['gallery']))//Если в куках пусто и номера фото не передается
{
$res=mysqlQuery("SELECT * FROM `". SVV_DBPREFIX ."gallery`
WHERE `public` = 1 AND
`id` = (SELECT MAX(`id`) FROM `". SVV_DBPREFIX ."gallery`)"
);
if(mysql_num_rows($res) > 0)
{
$row = htmlChars(mysql_fetch_assoc($res));
}
setcookie('gallery', $row[`id`], time() + 3600);
$m=1;
}
elseif($GET['photo']=="new"&&isset($_COOKIE['gallery']))//Если в куках есть номер страницы и номера фото не передается
{
$res=mysqlQuery("SELECT * FROM `". SVV_DBPREFIX ."gallery`
WHERE `public` = 1 AND `id`=".$_COOKIE['gallery']
);
$m=2;
}
else //Если явно задается номер фото
{
$res=mysqlQuery("SELECT * FROM `". SVV_DBPREFIX ."gallery`
WHERE `public` = 1 AND `id`=".$GET['photo']
);
setcookie('gallery', $GET['photo'], time() + 3600);
$m=3;
}
if(mysql_num_rows($res) > 0)//определяется содержит запрос информацию
{
$row = htmlChars(mysql_fetch_assoc($res));
}
$photo = !empty($row['foto'])?"<img alt='' height='238' src='".SVV_HOST."setup/gallery/".$row['foto']."' />":"Нет фото";
//////////////////////////////////////////////////////////
/**
* Generation links
* Генерациия ссылок
*/
$number=array();
$i=0;
$now='';
$res=mysqlQuery("SELECT `id` FROM `". SVV_DBPREFIX ."gallery`
ORDER BY `id`
");
if(mysql_num_rows($res) > 0)
{
while ($row = mysql_fetch_assoc($res))
{
$i=$i+1;
$number[$i]=$row['id'];
if($row['id']==$_COOKIE['gallery'])
{
$now=$i;
}
}
}
if($now==1&&$i==1)
{
$left_photo=$number[1];
$right_photo=$number[1];;
}
elseif($now==1&&$i==2)
{
$left_photo=$number[2];
$right_photo=$number[2];;
}
elseif($now==2&&$i==2)
{
$left_photo=$number[1];
$right_photo=$number[1];;
}
elseif($now==1)
{
$left_photo=$number[$i];
$right_photo=$number[2];;
}
elseif($now==$i)
{
$left_photo=$number[$now-1];
$right_photo=$number[1];;
}
else
{
$left_photo=$number[$now-1];
$right_photo=$number[$now+1];;
}
Но проблема в том что куки перезаписываются через раз!!! Что за фигня!!!