powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как показать общее к-во результатов поиска?
10 сообщений из 10, страница 1 из 1
как показать общее к-во результатов поиска?
    #34952059
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понимаю, что тема о производительности count(*) не проходит...
Но: я делаю поиск, у меня есть две кнопки - Next, Prev.
Next открытf, если результатов поиска больше, чем на странице.
Сам поиск делается очень неплохо, но сделать count(*) это будет писец....

Как сделать умнее? Чтобы было видно, сколько найдено, или ....
...
Рейтинг: 0 / 0
как показать общее к-во результатов поиска?
    #34952138
volod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
общее количество результатов произвольного поиска (ИМХО) - НИКАК.

насчет "след.стр.". я делал так: select * ... LIMIT $per_page + 1

на страницу выводить $per_page результатов, а если скуль отдает $per_page+1, значить есть ышшо одна страница.
...
Рейтинг: 0 / 0
как показать общее к-во результатов поиска?
    #34952161
volod.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
туплю блин.

еще про поиск. я делал индексированный поиск - словарь слов + линки к сообщениям. так вот к каждому слову было поле "количество" в базе и при индексации и удалении оно корректировалось. по одному слову можно было безболезненно построить пейджинг не вычисляя общего количества. так как поиск по & делался в памяти (выборка пересечения из таблицы связей), то с количеством по нескольким словам тоже особой проблемы не было, не считая расчета самого пересечения.
...
Рейтинг: 0 / 0
как показать общее к-во результатов поиска?
    #34952280
_Андрей_М
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю, поможет что-то типа

Код: plaintext
1.
2.
DECLARE curs CURSOR FOR SELECT * FROM Table;
FETCH FORWARD 1000 FROM curs;
...
Рейтинг: 0 / 0
как показать общее к-во результатов поиска?
    #34952388
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Андрей_МЯ думаю, поможет что-то типа

Код: plaintext
1.
2.
DECLARE curs CURSOR FOR SELECT * FROM Table;
FETCH FORWARD 1000 FROM curs;


вы правы, но проблема в том, что это полнотекстовый поиск, не отдельно взятая таблица.
Хотя, курсор должен сработать...
...
Рейтинг: 0 / 0
как показать общее к-во результатов поиска?
    #34953749
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Можно делать приблизительный подсчет, например, так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
proc db_explain_rows { sql args } {
    array set opts $args

    if [info exists opts(-db)] {
        upvar  1  $opts(-db) db
    }

    db_with_handle db {
        set explain [db_string_one "explain $sql" -db db]
        if [regexp  rows=(\\d+)  $explain  all rows] {
            return $rows
        } else {
            return -code error "Невозможно определить количество возвращаемых записей."
        }
    }
}

Хотя пользователи временами ругаются, что не точно считает, но иного способа сделать этот подсчет _быстро_ я не знаю.
...
Рейтинг: 0 / 0
как показать общее к-во результатов поиска?
    #34954363
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGМожно делать приблизительный подсчет, например, так:
Код: plaintext
... "explain $sql" ...
Хотя пользователи временами ругаются, что не точно считает, но иного способа сделать этот подсчет _быстро_ я не знаю.опасаюсь, умеет ли постгрес оценивать объем выборки по полнотекстовому индексу :-(

тынц тынц
...
Рейтинг: 0 / 0
как показать общее к-во результатов поиска?
    #34955048
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBat MBGМожно делать приблизительный подсчет, например, так:
Код: plaintext
... "explain $sql" ...
Хотя пользователи временами ругаются, что не точно считает, но иного способа сделать этот подсчет _быстро_ я не знаю.опасаюсь, умеет ли постгрес оценивать объем выборки по полнотекстовому индексу :-(

тынц тынц

я помню свои вопросы, хоть и не все ;)

можно, конечно, сделать в лоб, скажем:

запрос на поиск limit размер страницы: вернуть страницу результата

и тут же запрос на количество в отдельном thread, т.е. select count(*) from ( запрос на поиск тот самый) и когда завершится тогда использовать....
...
Рейтинг: 0 / 0
как показать общее к-во результатов поиска?
    #34955175
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuhя помню свои вопросы, хоть и не все ;)ведь мы тут не вдвоем общаемся. :-) другие наверняка не в курсе.

Winnipuhи тут же запрос на количество в отдельном thread, т.е. select count(*) from ( запрос на поиск тот самый) и когда завершится тогда использовать....чем вам способ volod.ru "LIMIT $per_page + 1" не подошел? он в самый раз для навигации "Next, Prev".
...
Рейтинг: 0 / 0
как показать общее к-во результатов поиска?
    #34962488
muma1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как вариант такая идея:
смотри ф. stat() из pg_tgrm. там есть пример.
получишь таблицу типа:
word, ndoc, nentry.
word должет содержать tsvector'ы, по которым делается tsearch поиск.
сделай индекс, и ищи свои count'ы. или даже 'nentry' !!!
конечно есть проблема с обновлением.. но это уже другой вопрос, можно в том же триггере
на заполение поля tsvector в таблице поиска +/- делать.
если слов (и tsvector'ov) несколько, то и ищем все и суммируем.
я думаю, на огромной базе это будет быстрее count.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как показать общее к-во результатов поиска?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]