|
|
|
| Здраствуйте, Уважаемые форумчане!
У меня возникла проблемка, делаю поиск по доске объявлений. Сами объявления сохраняются в базе данных MySQL, и выводятся по 20 на страницу. Страница передается методом GET, и при поиске по тексту объявлений надо узнать номер страницы или позицию от начала базы данных... Как ето реализовать? (Мне не хочется делать каждое объявление в отдельной странице потому что там мало текста) | |
|
|
|
|
|
|
|
для: slawik
(25.12.2007 в 16:42)
| | Во первых записи хранятся не в БД а в таблице.
Во вторых никакого начала ни у БД, ни даже у таблицы, нет. Равно как и конца. Поскольку записи там лежат внавал.
Любой порядок задается опцией ORDER BY
Так что позиция в html-таблице и номер страницы могут быть определены лишь опираясь на условие порядка в запросе выборки данных. | |
|
|
|
|
|
|
|
для: 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; и т. д. Пользователь вводит какоето слово, и как мне узнать в каком из етих запросов будет ето слово? | |
|
|
|
|
|
|
|
для: slawik
(25.12.2007 в 18:24)
| |
select * from board where `text` like '%ваше слово%' limit 0,20;
|
| |
|
|
|
|
|
|
|
для: MIchail1982
(25.12.2007 в 18:33)
| | ето будет выбираться только те объявления в которых есть ето слово, а мне надо немного другое, надо узнать в каком запросе есть имменно ето объявление (тоесть те цифры 0,20,40 и т.д.). Еслибы был только поиск по объявлениям то так можно, а ето будет поиск по всему сайту. А идея такая что будет выводится пару первых слов и ссылка на полное объявление. И как мне потом ссылку делать на ето объявление? | |
|
|
|
|
|
|
|
для: slawik
(25.12.2007 в 18:24)
| | >Вы меня не так поняли или может я не так написал! Приведу пример:
Это Вы меня не поняли.
>Есть например 100 объявлений они разделяются на 5 страниц.
>Ето будет запросы вида select * from board limit 0,20;
Запрос вида SELECT * LIMIT 40, 20 без определения ORDER BY вообще не имеет смысла.
Поскольку Вы не указываете каких 20 записей (и после 40) Вы хотите получить. | |
|
|
|
|
|
|
|
для: Trianon
(25.12.2007 в 19:45)
| | при создании таблицы там указывается по какому полю надо упорядочить по умолчанию у меня поле id всегда стоит autoincrement и уникальное и всегда по умолчанию по нему упорядковывается так что можно без order by обойтись. Пусть будет например order by id desc все равно ето не решает моей проблемы... | |
|
|
|
|
|
|
|
для: 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 условие_отбора_пользователя
|
Это и будет индекс, по которому целочисленным делением получается номер страницы (и в остатке номер позиции) | |
|
|
|
|
|
|
|
для: Trianon
(25.12.2007 в 20:24)
| | Понял, спасибо! :) | |
|
|
|