|
|
|
| вот тут нашел тему
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ой возвращает записи с лимитом... | |
|
|
|
|
|
|
|
для: а-я
(03.02.2008 в 09:26)
| | Вы не написали, с какими двумя запросами сравнивать.
И не процитировали ссылку на документацию, где, кстати, можно было бы ответ на свой вопрос найти. | |
|
|
|
|
|
|
|
для: 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ой, как я понимаю ,уже получает данные из памяти....
| |
|
|
|
|
|
|
|
для: а-я
(03.02.2008 в 11:36)
| | Замечательно.
Теперь всё же напишите, как выглядят те два запроса, которые, по Вашим словам, обычно предлагаются в учебниках. На простейшем примере.
А документацию можно было бы привести так, чтоб потом не приходилось скроллировать окно вправо на пять экранов. | |
|
|
|
|
|
|
|
для: 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
");
?>
|
| |
|
|
|
|
|
|
|
для: а-я
(03.02.2008 в 12:10)
| | И каким образом конструкция SELECT COUNT(*) ... LIMIT ... поможет нам получить строки таблицы? | |
|
|
|
|
|
|
|
для: Trianon
(03.02.2008 в 13:22)
| | >И каким образом конструкция SELECT COUNT(*) ... LIMIT ... поможет нам получить строки таблицы?
ой, сорри... там просто *
SELECT * ... LIMIT
выводим все данные с лимитом. =) совсем голова не варит... не спал всю ночь....
как то ночью я на большее способен, чем днем... но за то ночью практически не у кого спросить, чтоб решить ту или иную проблему. | |
|
|
|
|
|
|
|
для: а-я
(03.02.2008 в 13:38)
| | SELECT * и SELECT COUNT(*) в общем случае разные запросы.
Хотя бы потому, что один агрегатный, а другой - нет.
Соответственно в этом случае серверу придется исполнять два разных запроса.
А в оптимизированном варианте - лишь один. | |
|
|
|