Archive for August 5th, 2009
MySQL: LIMIT on LIMIT
Comments enabled. I *really* need your comment
From Stack Overflow:
Here's my situation: I want to select first ten entries from a database with
id = $id
.But I want the results to be listed in a certain priority: if
criteria = $criteria
, then I want those results displayed first.Otherwise, I just want to keep displaying the rest of the rows.
This can be done with a very simple query:
SELECT * FROM t_preference ORDER BY category = 1 DESC, id DESC LIMIT 10
In this query, category = 1
is a boolean expression which returns TRUE
when category
is equal to 1, FALSE
otherwise.
Since TRUE
is 1 and FALSE
is 0, TRUE
is greater than FALSE
from ORDER BY
's point of view. We should apply DESC
for the TRUE
results (i. e. rows with category = 1
) to be returned first.
However, this query is not very index friendly, and it will need to select all rows and sort them.
To improve performance, we should split this query into two index-friendly queries and merge them with a UNION
.
Let's create a sample table and see how do we do it: