Как ограничить результат выборки из таблицы

grey109

Новичок
Как ограничить результат выборки из таблицы

Допустим, в результате выборки из таблицы было найдено несколько тысяч совпадений. Мне нужно вывести на экран общее количество совпадений и, например, первые 100 из них.

Сейчас я делаю так:

$result = mysql_query($sql);
$n = mysql_num_rows($result);

echo "Совпадений".$n;

// вывод первых 100

$m=1;
while (...
{
...
if ($m==100) break;
$m++;
}

Вроде бы этот способ работает неплохо, но мне почему-то кажеться что должна быть родная mysql-ская функция, которая ограничивает результат выборки до 100. Изучение документации ничего не дало... хотя может плохо искал.

Вариант, типа сначала сделать

$result = mysql_query($sql); // получения кол-ва совпадений

а потом

$result2 = mysql_query($sql." limit 0, 100");

не подходит, т.к. запрос сложный и тачку грузит на 100%.


ЗЫ: сорри, если вопрос оказался чайниковский.
 

grey109

Новичок
Насколько я помню, для этого используется LIMIT
Если речь идет, о применении Limit в том виде, о котором я говорил, то это не подходит. Или же я чего-то не понял?
 

aZa

Новичок
Я думаю твой способ есть наиболее эффектиным ... По крайней мере я бы тоже так сделал. ;)
 

Апельсин

Оранжевое создание
> Если речь идет, о применении Limit в том виде, о котором я говорил, то это не подходит.

почему не подходит?
тебе надо вывести 100 записей, ну так и делаешь LIMIT 100
если нет, то тогда объясни почему не подходит.
 

Yurik

/dev/null
но мне почему-то кажеться что должна быть родная mysql-ская функция, которая ограничивает результат выборки до 100
да вроде нету, а смысл ??

P.S. Если mysql version >= 4.0 используй
SELECT SQL_CALC_FOUND_ROWS ......... LIMIT 0, 100
SELECT FOND_ROWS()

имхо лучший вариант
 

grey109

Новичок
почему не подходит?
тебе надо вывести 100 записей, ну так и делаешь LIMIT 100
если нет, то тогда объясни почему не подходит.
Объясняю еще раз: делать запрос два раза, т.е. начала

$result = mysql_query("select..."); // для получения общего кол-ва совпадений
$n = mysql_num_rows($result);

и следом

$result2 = mysql_query("select... limit 0, 100");

не подходит, т.к. запрос сложный и тачку грузит на 100% - все дико тормозит.

Если сразу делать второй запрос, то как узнать общее количество совпадений? ИМХО без первого запроса ни как. Так что от первого запроса никуда не уйдешь. Вопрос в другом: как результаты полученные от первого запроса урезать до 100?
 

Апельсин

Оранжевое создание
> Если сразу делать второй запрос, то как узнать общее количество совпадений? ИМХО без первого запроса ни как.

смотри ответ Юрия, в 4.0 можешь и одним запросом посчитать все: кол-во всех записей и данные выбрать.
 
Сверху