powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Общее кол-во записей с опцией LIMIT
10 сообщений из 10, страница 1 из 1
Общее кол-во записей с опцией LIMIT
    #32168847
Andrew_P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть запрос:
select field1, field2, field3
from table1
where ...
limit 0, 100

Проблема в том, что запрос выполняется ~15 секунд, но хочется пользователю вывести общее кол-во записей, не выполняя запрос два раза. Можно конечно сначала выполнить запрос "select count(*) ...", но так как он выполняется достаточно долго этого делать не хотелось бы :(.

Программирую на PHP, может кто что-то подобное делал? Подскажите, плиз...
...
Рейтинг: 0 / 0
Общее кол-во записей с опцией LIMIT
    #32168864
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю я, что проблема в индексах - должен отрабатывать быстро!
...
Рейтинг: 0 / 0
Общее кол-во записей с опцией LIMIT
    #32168871
Andrew_P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, индекс по полю поиска не стоит, да и его сделать не реально, т.к. все записи разные, да и еще поиск происходит с использованием like '%...%'. :(
...
Рейтинг: 0 / 0
Общее кол-во записей с опцией LIMIT
    #32168882
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может есть смыслвывести кол-во уже после вывода всех записей...

А так иногда делают сл. модель!

Выбирают во временную таблицу поле уникального индекса. Считают их кол-во потом выбирают уже остальные поля, опять-же опираясь на уже отобранные ID!
...
Рейтинг: 0 / 0
Общее кол-во записей с опцией LIMIT
    #32168925
Andrew_P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Суть понял, но это же MySQL, который не поддерживает вложенные запросы, как выбрать по ключу находящемуся во второй таблице, причем общее количество отобранных записей может превышать 3000 ?

Потом все пользователи работают по одним акаунтом, появится геморрой с уникальностью имени временной таблицы!
...
Рейтинг: 0 / 0
Общее кол-во записей с опцией LIMIT
    #32169179
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Временная таблица создается исключительно для конкретного соединения...
Начиная с MySQL 3.23 при создании таблицы можно использовать ключевое слово TEMPORARY. Временная таблица автоматически удаляется по завершении соединения, а ее имя действительно только в течение данного соединения.


Со вторым ключом щас подумаю...
mahoune
...
Рейтинг: 0 / 0
Общее кол-во записей с опцией LIMIT
    #32169577
Andrew_P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да знаю я, повторяю, для тех кто в танке:

MySQL не поддерживает вложенных запросов, как на основании полученной таблицы ключей выцепить необходимые данные из главной?

Если удасться выцепить, как добиться уникальности таблицы, если с ней работает куча пользователей с одним логином, и к томуже есть ссылки следующие 20 записей, предыдущие 20 записей?

Есть ли другой способ определить общее кол-во записей в исходном запросе содержащим LIMIT?
...
Рейтинг: 0 / 0
Общее кол-во записей с опцией LIMIT
    #32169931
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да не кипятись ты!

MySQL не поддерживает вложенных запросов, как на основании полученной таблицы ключей выцепить необходимые данные из главной?
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE TEMPORARY TABLE temp_table (row_no INTEGER, id INTEGER);
SET @count= 0 ;
INSERT INTO temp_table SELECT @count:=@count+ 1 , a.id FROM table1 a WHERE .... LIMIT n, m;
SELECT t.id, t.title, t.address FROM table1 t, temp_table z
WHERE
t.id=z.id;



Если удасться выцепить, как добиться уникальности таблицы, если с ней работает куча пользователей с одним логином, и к томуже есть ссылки следующие 20 записей, предыдущие 20 записей?
Как видно из моего поста, имя временной таблицы действительно в данном соединении. Если 10 человек заходят под одним логином получаем 10 соединений. Механизм следующие 20 и предыдущие 20 реализуются через временную таблицу, смотри поле row_no


Есть ли другой способ определить общее кол-во записей в исходном запросе содержащим LIMIT?

Поищи тут этот текст SQL_CALC_FOUND_ROWS
...
Рейтинг: 0 / 0
Общее кол-во записей с опцией LIMIT
    #32170021
Andrew_P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, все получилось.

Извини протупил с пунктом №2 - забыл, что таблицы перемножать можно...

А больше всего понравился пункт №3, вот пример его использования:
Код: plaintext
1.
2.
3.
select SQL_CALC_FOUND_ROWS id, name from table
limit  10 ,  10 ;

select FOUND_ROWS()

Последний оператор показывает количество найденных строк :)

Еще раз, огромное спасибо...
...
Рейтинг: 0 / 0
Общее кол-во записей с опцией LIMIT
    #32170038
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фигня, главное что б работало!
mahoune
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Общее кол-во записей с опцией LIMIT
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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