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:
Subscribe in a reader