[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: кол-во записей в запросе
maq
Вопрос такой:
При запросе в MySQL получаем набор записей, типа
SQL
SELECT * from t_Table LIMIT 200, 50

А надо также получить сколько всего записей возвращает этот запрос без
SQL
LIMIT 200, 50

Есть ли способ это узнать не открывая этот же запрос так
SQL
SELECT * from t_Table

и затем не перепригивая на каждую запись?

Заранее спасибо biggrin.gif



Спустя 2 минуты, 57 секунд (25.06.2009 - 20:42) waldicom написал(а):
SQL_CALC_FOUND_ROWS подойдет?

Спустя 5 минут, 11 секунд (25.06.2009 - 20:47) glock18 написал(а):
1. Выполнить этот же запрос без лимита и вместо * с COUNT(*).
2. поставить SQL_CALC_FOUND_ROWS сразу после слова SELECT в этом же запросе с LIMIT. после этого запрос
SQL
SELECT FOUND_ROWS();
вернет нужное число. Полагаю, что mysql_num_rows() выполняет как раз этот запрос, так что можете просто дописать к запросу SQL_CALC_FOUND_ROWS и выполнить после этого mysql_num_rows. если не получится, то можно ручками его выполнить после того запроса, у которого ряды нужно посчитать.

Спустя 1 час, 39 минут, 48 секунд (25.06.2009 - 22:26) maq написал(а):
Цитата
1. Выполнить этот же запрос без лимита и вместо * с COUNT(*)

Это значит 2 запроса будет. Первый с COUNT(*) (совсем забыл про него), 2-ой детальный с LIMIT
Цитата
поставить SQL_CALC_FOUND_ROWS сразу после слова SELECT в этом же запросе с LIMIT....

попробовал - не подойдет. Он возвращает кол-во фактически возвращенных записей (рядов).
Т.е если в таблице 100 записей и используется LIMIT 50, 10, то mysql_num_rows() вернет 10, а не 100 (как мне надо).

Кажется без 2-х запросов не обойтись wink.gif

Спустя 10 минут, 42 секунды (25.06.2009 - 22:37) kirik написал(а):
Цитата (maq @ 25.06.2009 - 14:26)
Кажется без 2-х запросов не обойтись

Полюбому)

Цитата (maq @ 25.06.2009 - 14:26)
попробовал - не подойдет. Он возвращает кол-во фактически возвращенных записей (рядов).
Т.е если в таблице 100 записей и используется LIMIT 50, 10, то mysql_num_rows() вернет 10, а не 100 (как мне надо).

Что-то не так пробовал..

Спустя 2 минуты, 2 секунды (25.06.2009 - 22:39) glock18 написал(а):
Цитата
Полюбому)

++

Спустя 19 часов, 41 минута, 49 секунд (26.06.2009 - 18:21) maq написал(а):
Цитата (kirik @ 25.06.2009 - 19:37)
Цитата (maq @ 25.06.2009 - 14:26)
Кажется без 2-х запросов не обойтись

Полюбому)

Цитата (maq @ 25.06.2009 - 14:26)
попробовал - не подойдет. Он возвращает кол-во фактически возвращенных записей (рядов).
Т.е если в таблице 100 записей и используется LIMIT 50, 10, то mysql_num_rows() вернет 10, а не 100 (как мне надо).

Что-то не так пробовал..

Что-то не клеются ответы... wink.gif
То вы подтверждаете, что без 2-х запросов не обойтись. С другой стороны, утверждаете, что "я не так пробовал", т.е. можно получить ответ используя mysql_num_rows() одним запросом? Это не противоречит одно другому?

P.S. Можно конкретный пример с mysql_num_rows(), если что не так попробовал?

Спустя 12 минут, 6 секунд (26.06.2009 - 18:33) glock18 написал(а):
Гыыы smile.gif mysql_num_rows() тоже выполняет запрос smile.gif просто ты его не видишь и сам не пишешь. как раз который я писал:

SQL
SELECT FOUND_ROWS();

Спустя 24 минуты, 54 секунды (26.06.2009 - 18:58) kirik написал(а):
Цитата (glock18 @ 26.06.2009 - 10:33)
mysql_num_rows() тоже выполняет запрос

Разве? Я почему-то думаю что эта функция пересчитывает элементы из возвращенного результата mysql_query();..

Цитата (maq @ 26.06.2009 - 10:21)
То вы подтверждаете, что без 2-х запросов не обойтись. С другой стороны, утверждаете, что "я не так пробовал", т.е. можно получить ответ используя mysql_num_rows() одним запросом? Это не противоречит одно другому?

Через mysql_num_rows() можно получить кол-во строк, которые вернул ваш запрос. А чтобы получить "сколько всего записей возвращает этот запрос без LIMIT 200, 50", то тут нужно 2 запроса. Один - который вернет ваши записи, а второй без LIMIT'a smile.gif Либо с использованием SQL_CALC_FOUND_ROWS и затем забрать количество результатов без LIMIT с помощью еще одного запроса SELECT FOUND_ROWS(). Вы же пишите, что
Цитата (maq @ 25.06.2009 - 14:26)
Цитата
поставить SQL_CALC_FOUND_ROWS сразу после слова SELECT в этом же запросе с LIMIT....

попробовал - не подойдет. Он возвращает кол-во фактически возвращенных записей (рядов).

откуда я сделал вывод, что вы что-то не так пробовали smile.gif
Дабы развеять сомнения, приведу код:

PHP
// делаем запрос с LIMIT
$query = mysql_query("SELECT SQL_CALC_FOUND_ROWS * from t_Table LIMIT 200, 50");
while(
$row = mysql_fetch_assoc($query))
{
// тут что-нибудь делаем с результатами
}
mysql_free_result($query);

// а тут вытаскиваем общее количество записей попадающих под условие WHERE (если есть), но без LIMIT
$query = mysql_query("SELECT FOUND_ROWS()"); 
$total 
= mysql_result($query, 0);
mysql_free_result($query);

echo 'Всего записей: '.$total;


Либо, опять же 2 запроса:
PHP
// делаем запрос с LIMIT
$query mysql_query("SELECT * from t_Table LIMIT 200, 50");
while(
$row mysql_fetch_assoc($query))
{
// тут что-нибудь делаем с результатами
}
mysql_free_result($query);

// а тут вытаскиваем общее количество записей попадающих под условие WHERE (если есть), но без LIMIT
$query mysql_query("SELECT COUNT(*) from t_Table "); 
$total mysql_result($query0);
mysql_free_result($query);

echo 
'Всего записей: '.$total;

Спустя 1 час, 24 минуты, 15 секунд (26.06.2009 - 20:22) glock18 написал(а):
Цитата (kirik @ 26.06.2009 - 15:58)
Разве? Я почему-то думаю что эта функция пересчитывает элементы из возвращенного результата mysql_query();..


да, к сожалению я "облажался" со своей мыслью. Он и правда подчитывает просто. идеалист, блин sad.gif
Значит запрос ручками надо делать самому.

Спустя 1 час, 24 минуты, 32 секунды (26.06.2009 - 21:47) maq написал(а):
Цитата
Дабы развеять сомнения, приведу код:

Теперь уже намного яснее! Проверю код завтра

Спустя 1 день, 18 часов, 6 минут, 36 секунд (28.06.2009 - 15:53) maq написал(а):
Цитата
Дабы развеять сомнения, приведу код:
PHP
// делаем запрос с LIMIT
$query mysql_query("SELECT SQL_CALC_FOUND_ROWS * from t_Table LIMIT 200, 50");
while(
$row mysql_fetch_assoc($query))
{
// тут что-нибудь делаем с результатами
}
mysql_free_result($query);

// а тут вытаскиваем общее количество записей попадающих под условие WHERE (если есть), но без LIMIT
$query mysql_query("SELECT FOUND_ROWS()"); 
$total mysql_result($query0);
mysql_free_result($query);

echo 
'Всего записей: '.$total;

Все ок. Проблема решена. Всем спасибо rolleyes.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.