Ограничение с использованием WHERE вместо LIMIT - PullRequest
0 голосов
/ 31 августа 2011

Я хочу выделить несколько строк с определенным фильтром, но не ограничивайтесь, если я не получу, по крайней мере, 40 строк.

Это псевдо-пример:

SELECT * FROM `table`
WHERE
   SUM(1) < 40 OR
   `age` > 18

Это похоже на LIMIT, но LIMIT будет учитывать фильтр WHERE. Я хочу игнорировать фильтр, если у меня нет как минимум 40 строк (но я принимаю первые строки).

Как мне это сделать?

Редактировать : многие люди сомневались в том, что я действительно хотел.

Это пример:

ID AGE
1  10
2  20
3  30
4  10
5  20
6  30
7  10

Я хочу получить первые 2 строки когда-либо. И только после как минимум двух строк получить новые строки, соответствующие заданным условиям (ГДЕ).

Например: я хочу, чтобы в первых 2 рядах было больше строк, возраст которых равен 30. Результат будет эквивалентен:

ID AGE
1  10 <first>
2  20 <second>
3  30 <conditional>
6  30 <conditional>

1 Ответ

1 голос
/ 31 августа 2011

Вы можете использовать возрастающую переменную @rownum для имитации той же функциональности.Однако это гораздо менее эффективно, чем limit, поскольку сервер вносит отфильтрованные строки в память и постоянно выполняет вычисление @rownum:=@rownum+1.

SELECT @rownum:=@rownum+1, t.*
FROM `table` t, (SELECT @rownum:=0) r
WHERE
   @rownum <= 40 OR
   `age` > 18
...