Липсващо id

teroristd

Registered
Здравейте, сигурно е прост въпросът ми но не мога да включа как да го направя. Та така имам галерия с тумбнейлчета, при натискане на снимката се отива на страница с голяма снимка и текст. На тази страница си викам ид-то на дадената снимка. До тук добре но реших да направя бутони предишна, следваща снимка за да може направо да се въртят големите без да се ходи до галерията с тумбнейлите. Правя го така

$next_page = $id + 1;
$prev_page = $id - 1;

и тука е проблема, в случай че една или повече снимки са били изтрити от базата има прекъсване в поредноста на ид-тата. Примерно имам 1 и 2 345 са изтрити и идва 6. Как да направя някаква проверка дали съществува даденото ид и ако не да провери следващото и така докато не попадне на съществуващо.
Мерси.
 
с проверка и цикъл.

примерно имаш това $prev_page = $id - 1;

$check = mysql_query("SELECT * FROM gallery WHERE id = $prev_page") or die (mysql_error()); ако заявката ти върне ,че има такова ид всичко готово,ако ти върне,че няма след това ще стане WHERE id = $pred_page ,където prev_page ще е $id -2;

това според мен може и с цикъл да се направи.
 
не, прави се така:
заявка за следващо id:
[sql]
SELECT *
FROM `gallery`
WHERE `id` > { $id }
ORDER BY `id` ASC
LIMIT 1[/sql]

заявка за предишно id

[sql]SELECT *
FROM `gallery`
WHERE `id` < { $id }
ORDER BY `id` DESC
LIMIT 1[/sql]


Ако искаш да вземеш само id-то за да направиш линк към него, разбира се, пишеш SELECT `id` FROM ... :)
 
благодаря djman работи перфектно но има един малък проблем :) значи въртим снимките докато стигнем последното ид и дава празен(грешен) линк какво правим в случая
 
Не го прави със заяква използвай array_search()
само ти трябва id-to на снимката
Каква е разликата
Array_search ти връща ключа на масива а както знаем те са 0,1,2,3
след това проверяваш дали има предишен ключ или не
 
macmen честно казано изобщо не разбрах какво имаш предвид не знам каква е разликата дали търся със заявка или по ключ на масив въпроса е как да направя проверката дали нама следващо ид
 
Защо му е array_search(); ?

Щом нещо може да се направи във заявката, нека да се направи там. Защо му е да вади всички резултати, да ги вкарва във масив, после този масив да минава през array_serach(); и да покаже резултата ?
Като може да си направи проверките във заявката и след това ще си покаже резултатите.

А до това да не ти вади празен резултат ползвай <= или >= във заявката.
 
Еди това правя виж по горе :) просто в един момент нама повече снимки демек свършват ид-тата и линка става така

http://sait/photos.php?id=
 
http://php.net/manual/en/function.array-search.php
Ето как работи array_search
Спеставяш две заявки към DB-то. Две бавни заявки който не ти трябват изобщо.
Ако ще правиш заяки трябва да ги направи в една(Но трябва да се повери за колко време се правят. )

Другото което е
Код:
SELECT * FROM `gallery`

WHERE `id` < { $id }

ORDER BY `id` DESC

LIMIT 1
- Без кеширане е доста ама доста бавна заявка.

SELECT * е много излишно Това ти взема всичко, а на теб ти е нужно едно ид и име ORDER BY правиш на всички записи от Galley Хммм ако са много записите в DB-то Ще има да си чака
Array_search Върши работа и то добре, не е наи бързия вариянт, но е добър.
 
$prev = 0;
$next = 0;
$id = array_search($_GET['pic_id'], $arr_pic);

if ($id > 0) {
$prev = $arr_pic[($id - 1)];
}

if ($id < count($arr_pic)) {
$next = $arr_pic[($id + 1)];
}
 
да обаче така не става явно не си чел темата отначало ако има липсващи ид-та в базата трябва да е нещо с <>
 
Таблиците са ти Gallery, pictures, и трета да направиш релация или само Gallery, pictures
(Имената са примерни)
 
имам само една таблица в случая pictures
със заявката where id > $id работи колкото и липсващи да има защото в случая търси следващото най голямо въпроса е че като свършат снимките няма следващо и аз искам да остане на последното или линка да стане неактивен
 
$current_id = 1;
$prev = 0;
$next = 0;
$array = array(1, 2, 3, 500, 940, 50); // SELECT id FROM pictures
$arr_key = array_search($current_id, $array);

if ($arr_key > 0) {
$prev = $array[($arr_key - 1)];
}

if ($arr_key < count($array)) {
$next = $array[($arr_key + 1)];
}

echo $prev."<br>".$next
// ако е 0 няма предишно id ако не ди го показва.
 
macmen благодаря за опита но няма да се получи по този начин

$current_id = 1; //първо ид не е 1 може да е всякакво но мога да си го взема с гет ид

$prev = 0;
$next = 0;

$array = array(1, 2, 3, 500, 940, 50); // второ този масив не може да се напише ръчно защото се добавят и се изтриват снимки от базата постоянно

$arr_key = array_search($current_id, $array);


if ($arr_key > 0) {
$prev = $array[($arr_key - 1)];
}

if ($arr_key < count($array)) {
$next = $array[($arr_key + 1)];
// и последно ако да кажем $current_id е 1 но 2 липсва а може и 3 и 4 и т.н. ти събираш $current_id в случая 1+1 =2 но две няма и какво става

}

echo $prev."<br>".$next
 
Този начин с array_search също е готин, $array го пълниш с (явно?) всички id-та от базата данни...

А моя начин, просто правиш проверка дали базата връща някакъв резултат, ако не връща - не показваш линк (или показваш за 1-вата снимка) :)
 
teroristd каза:
macmen благодаря за опита но няма да се получи по този начин

$current_id = 1; //първо ид не е 1 може да е всякакво но мога да си го взема с гет ид

$prev = 0;
$next = 0;

$array = array(1, 2, 3, 500, 940, 50); // второ този масив не може да се напише ръчно защото се добавят и се изтриват снимки от базата постоянно

$arr_key = array_search($current_id, $array);


if ($arr_key > 0) {
$prev = $array[($arr_key - 1)];
}

if ($arr_key < count($array)) {
$next = $array[($arr_key + 1)];
// и последно ако да кажем $current_id е 1 но 2 липсва а може и 3 и 4 и т.н. ти събираш $current_id в случая 1+1 =2 но две няма и какво става

}

echo $prev."<br>".$next
Ами да може да всякакво виж примера който съм дал.
$current_id = Може да 1000 това да не е те бърка стига да го има в db-to
$array = array(1, 2, 3, 500, 940, 50); Това ще са ти id-tata от дб-то
array_search ти търски това id и ако го намери връща клуча под който е заведено вота id
Пример:
Ако имаш $id = 500
то това id ти с key 4 от масив $array
$array[4] = 500
с две думи array_search ти търси това 500 и ти дава ключа на масива. Прочети малко за array_search
 

Back
Горе