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

Форум MySQL

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

 

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

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

тема: Как узнать страницу или позицию от начала базы данных
 
 автор: slawik   (25.12.2007 в 16:42)   письмо автору
 
 

Здраствуйте, Уважаемые форумчане!
У меня возникла проблемка, делаю поиск по доске объявлений. Сами объявления сохраняются в базе данных MySQL, и выводятся по 20 на страницу. Страница передается методом GET, и при поиске по тексту объявлений надо узнать номер страницы или позицию от начала базы данных... Как ето реализовать? (Мне не хочется делать каждое объявление в отдельной странице потому что там мало текста)

   
 
 автор: Trianon   (25.12.2007 в 16:49)   письмо автору
 
   для: slawik   (25.12.2007 в 16:42)
 

Во первых записи хранятся не в БД а в таблице.
Во вторых никакого начала ни у БД, ни даже у таблицы, нет. Равно как и конца. Поскольку записи там лежат внавал.
Любой порядок задается опцией ORDER BY
Так что позиция в html-таблице и номер страницы могут быть определены лишь опираясь на условие порядка в запросе выборки данных.

   
 
 автор: slawik   (25.12.2007 в 18:24)   письмо автору
 
   для: Trianon   (25.12.2007 в 16:49)
 

Вы меня не так поняли или может я не так написал! Приведу пример:
Есть например 100 объявлений они разделяются на 5 страниц. Ето будет запросы вида select * from board limit 0,20; select * from board limit 20,20; select * from board limit 40,20; и т. д. Пользователь вводит какоето слово, и как мне узнать в каком из етих запросов будет ето слово?

   
 
 автор: MIchail1982   (25.12.2007 в 18:33)   письмо автору
 
   для: slawik   (25.12.2007 в 18:24)
 


select * from board where `text` like '%ваше слово%' limit 0,20;

   
 
 автор: slawik   (25.12.2007 в 19:00)   письмо автору
 
   для: MIchail1982   (25.12.2007 в 18:33)
 

ето будет выбираться только те объявления в которых есть ето слово, а мне надо немного другое, надо узнать в каком запросе есть имменно ето объявление (тоесть те цифры 0,20,40 и т.д.). Еслибы был только поиск по объявлениям то так можно, а ето будет поиск по всему сайту. А идея такая что будет выводится пару первых слов и ссылка на полное объявление. И как мне потом ссылку делать на ето объявление?

   
 
 автор: Trianon   (25.12.2007 в 19:45)   письмо автору
 
   для: slawik   (25.12.2007 в 18:24)
 

>Вы меня не так поняли или может я не так написал! Приведу пример:
Это Вы меня не поняли.

>Есть например 100 объявлений они разделяются на 5 страниц.
>Ето будет запросы вида select * from board limit 0,20;

Запрос вида SELECT * LIMIT 40, 20 без определения ORDER BY вообще не имеет смысла.
Поскольку Вы не указываете каких 20 записей (и после 40) Вы хотите получить.

   
 
 автор: slawik   (25.12.2007 в 20:05)   письмо автору
 
   для: Trianon   (25.12.2007 в 19:45)
 

при создании таблицы там указывается по какому полю надо упорядочить по умолчанию у меня поле id всегда стоит autoincrement и уникальное и всегда по умолчанию по нему упорядковывается так что можно без order by обойтись. Пусть будет например order by id desc все равно ето не решает моей проблемы...

   
 
 автор: Trianon   (25.12.2007 в 20:24)   письмо автору
 
   для: slawik   (25.12.2007 в 20:05)
 

>при создании таблицы там указывается по какому полю надо упорядочить по умолчанию у меня поле id всегда стоит autoincrement и уникальное
Ошибаетесь. При создании таблицы информация о порядке доступа к строкам указана быть не может.
первичный ключ служит совершенно не для этого.

>и всегда по умолчанию по нему упорядковывается так что можно без order by обойтись.

Вы порете чушь.
Достаточно удалить из середины десяток записей и добавить новых, как ожидаемый Вами по умлчанию порядок окажется нарушен.

> Пусть будет например order by id desc все равно ето не решает моей проблемы...

ORDER BY id DESC - это уже какая-то конкретика.

Соответственно для такого случая придется вычислить число строк, id которых превышает искомый.

SELECT COUNT(id) AS gt FROM tbl WHERE id > $id AND условие_отбора_пользователя


Это и будет индекс, по которому целочисленным делением получается номер страницы (и в остатке номер позиции)

   
 
 автор: slawik   (25.12.2007 в 20:41)   письмо автору
 
   для: Trianon   (25.12.2007 в 20:24)
 

Понял, спасибо! :)

   
Rambler's Top100
вверх

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