I want to select some rows with a specific filter, but don’t limit if I don’t get, at least, 40 rows.
It’s a pseudo-example:
SELECT * FROM `table`
WHERE
SUM(1) < 40 OR
`age` > 18
It’s similar to LIMIT, but LIMIT will consider the WHERE filter ever. I want to ignore the filter if I don’t have at least 40 rows (but accept the firsts rows).
How I do that?
Edit: a lot of people had doubts what I really wanted.
This is an example:
ID AGE
1 10
2 20
3 30
4 10
5 20
6 30
7 10
I want to get the first 2 rows EVER. And only after at least two rows, get new rows that match the given conditions (WHERE).
For example: I want the first 2 rows more rows whose age is 30. The result would be equivalent to:
ID AGE
1 10 <first>
2 20 <second>
3 30 <conditional>
6 30 <conditional>
You can use an increasing variable
@rownumto simulate the same functionality. However, this is much less efficient thanlimitbecause the server brings the filtered-out rows into memory and continuously performs the@rownum:=@rownum+1calculation.