[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: формирование ссылок для базы SQL
kent666
Всем привет!
У меня есть база. В ней ключевое поле "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

Спустя 13 минут, 21 секунда (2.07.2011 - 17:07) kent666 написал(а):
я думал при помощи запросов
Определить мах 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 написал(а):
Не понимаю, зачем так извращаться? (;
Можно ведь полностью переложить на пхп:

$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];;
}

Но проблема в том что куки перезаписываются через раз!!! Что за фигня!!!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.