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

Форум MySQL

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

 

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

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

тема: FOUND_ROWS() или 2 выборки?
 
 автор: а-я   (03.02.2008 в 09:26)   письмо автору
 
 

вот тут нашел тему
http://softtime.ru/forum/read.php?id_forum=3&id_theme=20096

там можно узнать сколько полей всего по условию подходит... без учета limit

SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name  WHERE id > 100 LIMIT 10; 
SELECT FOUND_ROWS();


такая конструкция быстрее??
чем делать практически 2 одинаковых запроса,
1ый для того чтоб узнать сколько всего записей, а 2ой возвращает записи с лимитом...

   
 
 автор: Trianon   (03.02.2008 в 10:57)   письмо автору
 
   для: а-я   (03.02.2008 в 09:26)
 

Вы не написали, с какими двумя запросами сравнивать.
И не процитировали ссылку на документацию, где, кстати, можно было бы ответ на свой вопрос найти.

   
 
 автор: а-я   (03.02.2008 в 11:36)   письмо автору
 
   для: Trianon   (03.02.2008 в 10:57)
 


FOUND_ROWS()
Возвращает количество строк, которые возвратила бы последняя команда SELECT SQL_CALC_FOUND_ROWS ... при отсутствии ограничения оператором LIMIT.


mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();


Второй вызов команды SELECT возвратит количество строк, которые возвратила бы первая команда SELECT, если бы она была написана без выражения LIMIT. Отметим, что, хотя при использовании команды SELECT SQL_CALC_FOUND_ROWS ..., MySQL должен пересчитать все строки в наборе результатов, этот способ все равно быстрее, чем без LIMIT, так как не требуется посылать результат клиенту.

Функция SQL_CALC_FOUND_ROWS появилась в MySQL 4.0.0.



вот как раз меня это заинтересовало...
т.е. в основном в учебниках написано, что надо узнать сколько всего записей подходят(первый запрос).
на основании полученых данных можно узнать сколько всего страниц будет, при указании лимита. и т.д. а потом уже получать сами данные с лимитом (2ой запрос)...

а тут хорошая функция оказывается есть...
только надо навигацию делать после получения результата...

тут конечно, тоже 2 запроса, но 2ой, как я понимаю ,уже получает данные из памяти....

   
 
 автор: Trianon   (03.02.2008 в 11:43)   письмо автору
 
   для: а-я   (03.02.2008 в 11:36)
 

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

А документацию можно было бы привести так, чтоб потом не приходилось скроллировать окно вправо на пять экранов.

   
 
 автор: а-я   (03.02.2008 в 12:10)   письмо автору
 
   для: Trianon   (03.02.2008 в 11:43)
 

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

код? ну что-то вроде этого....

<?
$all 
= @mysql_result(
                    
mysql_query("
                                SELECT 
                                 COUNT(*) 
                                FROM 
                                 `tbl_name`  
                                WHERE 
                                 `status`='0'
                                "
)
                    ,
0);

$pages ceil($all/$kol_vo);    
$page $_GET['page'];
$RES mysql_query("
                   SELECT 
                    COUNT(*) 
                   FROM 
                    `tbl_name`  
                   WHERE 
                    `status`='0'
                   limit "
.(($page 1)*$kol_vo).",$kol_vo
                   "
);
?>

   
 
 автор: Trianon   (03.02.2008 в 13:22)   письмо автору
 
   для: а-я   (03.02.2008 в 12:10)
 

И каким образом конструкция SELECT COUNT(*) ... LIMIT ... поможет нам получить строки таблицы?

   
 
 автор: а-я   (03.02.2008 в 13:38)   письмо автору
 
   для: Trianon   (03.02.2008 в 13:22)
 

>И каким образом конструкция SELECT COUNT(*) ... LIMIT ... поможет нам получить строки таблицы?

ой, сорри... там просто *

SELECT * ... LIMIT

выводим все данные с лимитом. =) совсем голова не варит... не спал всю ночь....
как то ночью я на большее способен, чем днем... но за то ночью практически не у кого спросить, чтоб решить ту или иную проблему.

   
 
 автор: Trianon   (03.02.2008 в 13:51)   письмо автору
 
   для: а-я   (03.02.2008 в 13:38)
 

SELECT * и SELECT COUNT(*) в общем случае разные запросы.
Хотя бы потому, что один агрегатный, а другой - нет.

Соответственно в этом случае серверу придется исполнять два разных запроса.
А в оптимизированном варианте - лишь один.

   
Rambler's Top100
вверх

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