Amend MySQL Query to force a record to appear first?
I have the following:
"SELECT * FROM pages WHERE parent=0 ORDER BY `sort` ASC"
There is a bug somewhere in the system I am working with which means that a page can have a lower sort value than the home page. I am currently lookin开发者_运维百科g into this, in the meantime i need the query to enforce that home page comes out first.
Can this query be adapted so it always get's the page with an id of 1 to appear first, then rest are sorted by the sort column?
SELECT  *
FROM    pages
ORDER BY
        id = 1 DESC, sort
If you are going to apply a LIMIT clause to this query, it may be better to split it in two:
SELECT  *
FROM    pages
WHERE   id = 1
UNION ALL
SELECT  *
FROM    (
        SELECT  *
        FROM    pages
        WHERE   parent = 0
                AND id <> 1
        ORDER BY
                parent, sort
        LIMIT 9
        )
so that an index on (parent, sort) can be used.
SELECT * FROM pages WHERE parent=0 ORDER BY IF( id = 1, -1, 0 ) ASC, id ASC
SELECT * FROM pages WHERE parent=0 ORDER BY `id` ASC, `sort` ASC
 
         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论