Как сделать ссылку "назад" на странице подробного описания товара?

tend

Новичок
Как сделать ссылку "назад" на странице подробного описания товара?

Всем привет!
Мне нужно сделать ссылку "назад" на странице подробного описания товара, чтобы возвращаться обратно к списку товаров.
Пример: в базе есть 30 товаров. Есть страница, на которой выводятся названия товаров со ссылками на подробное их описание на новую страницу. Выводится по 10 товаров на странице. Получается (по примеру) 3 страницы: page.php?id=n (n - номер страницы, т.е. 1, 2 или 3). Подробное описание товара находится на странице: info.php?id=n (n - номер товара).
Например, на второй странице (page.php?id=2) человек нашел товар и захотел прочитать его описание. Он заходит на страницу товара (info.php?id=...).
Так вот, мне нужно сделать ссылку "назад", которая будет возвращать человека назад на вторую страницу (page.php?id=2).
Ссылка "javascript:history.back()" не подходит, т.к. на страницу товара (info.php?id=...) могут прийти не только со страницы page.php?id=2, но и с других сайтов, а также поисковиков.
Как это сделать по-другому, чтобы, если даже пришли с другого сайта, ссылка вела на страницу page.php?id=2? Я не знаю, может есть специальные для этого функции или еще чего. Прошу помочь.
 

Фанат

oncle terrible
Команда форума
vasa_c
ты тормоз

-~{}~ 07.07.06 20:52:

tend
для этого надо знать, по какому принципу выводится список
 

bgm

 
Т.е. тебе нужно по номеру товара NN узнать номер страницы на которой он находится? Для этого нужно произвести следующие действия:

1. Узнать сколько товаров отображается _до_ текущего товара;
2. Произвести нехитрые математические действия и получить из этого значения и значения для постраничной навигации номер страницы, которые использовать в параметрах ссылки "Назад".
 

tend

Новичок
Фанат
В таблице куча товаров разных категорий. При выводе списка выбираются все товары выбранной категории и выводятся по 10 на странице с формированием соответствующих ссылок на остальные страницы. Без всяких наворотов.
Кстати, хотел узнать кое-что по поводу выбора строк. Читал в faq, что база mysql - это свалка данных, нумерации строк нет, и данные выбираются без какого-либо порядка. Я пока новичок, мало знаю. Но немного поэкспериментировал на выводе строк из таблицы - они у меня выбираются в том порядке, в каком были добавлены в базу. Это всегда так? То есть, если этот порядок подходит, сортировать строки при выборе не обязательно?

bgm
да, похожую ситуацию я обдумывал: при загрузке страницы товара определять категорию товара, потом выбирать все товары данной категории, посчитать их общее количество, потом через перебор массива путем for (i=0;...) пройти все эти выбранные строки и найти ту, в которой id товара = id (info.php?id=...) - мы получим i - номер строки, а потом по общему количеству выбранных строк и этому номеру можно будет определить номер страницы.
Но это, как мне кажется, не самый лучший вариант. Мне кажется, что есть проще. При таком подходе и большой базе данных (100000 строк) это было бы значительной нагрузкой, если я правильно понимаю, и я бы лучше просто сделал ссылку не на страницу категории, где находится нужный товар, а просто ссылку на первую страницу данной категории.
Хотя мне так хочется сделать именно на нужную страницу, причем чтобы это делалось просто и в 2-3 действия без всяких переборов.
Профессионалы, помогите, плиз. :)
 

SelenIT

IT-лунатик :)
tend
Сортировать надо. Во-первых, только ORDER BY гарантирует неизменность порядка. Во-вторых, так всегда можно одним запросом узнать кол-во записей до заданной (при этом порядке сортировки), что решает 90% искомой задачи. Если в твоем примере сортировка идет по возрастанию id - запрос вообще элементарен: select count(*) from ... where id < ... and category = ...
 

Фанат

oncle terrible
Команда форума
Читал в faq, что база mysql - это свалка данных, нумерации строк нет, и данные выбираются без какого-либо порядка. Я пока новичок, мало знаю. Но немного поэкспериментировал на выводе строк из таблицы - они у меня выбираются в том порядке, в каком были добавлены в базу. Это всегда так? То есть, если этот порядок подходит, сортировать строки при выборе не обязательно?
я правильно понимаю ход твоей мысли, что тебе, как новичку, база сделает поблажку?
 

tend

Новичок
SelenIT, да, сортировка по id.
Моя интуиция говорила, что ты подскажешь. :)
СПАСИБО ОГРОМНОЕ!
Блин, это ж настолько просто!
SelenIT, поделись, где ты этому научился? :)
В очередной раз удивляюсь простоте и легкости MySQL (когда знаешь возможности, конечно).
 

Фанат

oncle terrible
Команда форума
представляю, если бы все каталоги сортировались по id
телефонная книга, скажем...
очень, очень удобно
 

bgm

&nbsp;
1. По какому принципу у тебя сортируется (ORDER BY) товар при выводе
1.1 Если у тебя нет принципа сортировки товара, то срочно его придумывай
2. Тот же принцип сортировки применяй для получения количества товаров до товара с выбранным ID (используя COUNT)

Количество действий для получения номера страницы при правильной структуре БД: один SQL запрос и одно математическое выражение.

Что тебе надо читать:
1. Справочное руководство MySQL - http://mysql.com (ключевые слова: SELECT, ORDER BY, COUNT, WHERE)
2. Купи книжку по SQL (к примеру "SQL - 10 минут на урок" Бен Форта)
3. Вообще - посмотри список литературы здесь: http://phpclub.ru/?m=book&s=131
 

tend

Новичок
я правильно понимаю ход твоей мысли, что тебе, как новичку, база сделает поблажку?
Нет, ход моей мысли был направлен немного не в эту сторону. :)
Я просто думал, что если нет сортировки, то строки выводятся по порядку их добавления в таблицу.
 

Фанат

oncle terrible
Команда форума
Количество действий для получения номера страницы при правильной структуре БД: один SQL запрос и одно математическое выражение.
это только в идеальном случае. когда сортировка идёт по уникальному полю.

-~{}~ 07.07.06 23:47:

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

bgm

&nbsp;
Фанат
это только в идеальном случае. когда сортировка идёт по уникальному полю.
для веб-приложений пока не доводилось встречать "хитрых" условий сортировки, которые не могли бы быть описаны одним запросом. представляется, что (пальцем в небо?) таких случаев 99,99 %.
 

Фанат

oncle terrible
Команда форума
напиши запрос, который выведет нужное число при сортировке date,id
 

SelenIT

IT-лунатик :)
навскидку что-то а-ля [sql]select count (t2.id) from `table` t1 inner join `table` t2 on t2.date < t1.date or (t2.date = t1.date and t2.id < t1.id) where t1.id = ...[/sql]
 

tend

Новичок
представляю, если бы все каталоги сортировались по id
телефонная книга, скажем...
очень, очень удобно
Фанат
У тебя 18103 сообщений на форуме, а у меня 11. Ты что хочешь, чтобы я знал столько, сколько и ты?
Я всего несколько дней назад узнал что такое mysql. Так что все ок. Спасибо тебе, буду знать теперь многое про сортировку. :)

bgm
Я сейчас самоучитель Котерова изучаю. Думаю, для начала пойдет. И так не с первого раза пока въезжаю. :)
 

Фанат

oncle terrible
Команда форума
tend
я правильно понял твою мысль, что ты никогда не был в библиотеке?
или не видел классного журнала со списком учеников? не видел ту же телефонную книгу?
для всего этого надо написать много-много сообщений на форуме?

-~{}~ 08.07.06 00:11:

заметь, наше общение продолжается только потому, что ты пытаешься оправдываться ;-)
если уж ты это делаешь, то старайся немного больше думать над своими рпеликами =)
 
Сверху