Hi i have 100 records in my SQL table i want to sort them ASC by name but i need one record on top of all record nr 43.
Is there way i can pull this record 43 first and then ever开发者_JAVA百科ything else ASC order by name?
Trick is to do it in one query.
No UNIONs or CASEs needed:
ORDER BY id = 43 DESC, name ASC
Use this:
ORDER BY CASE WHEN (record is 43) THEN 0 ELSE 1 END, Name
Use a union to create a query that selects the first record then appends the set of records that should appear beneath.
E.g:
select * from table where id = 43;
union
select * from table where id <> 43;
This query should add a column called priority, which has the value 1 on the record with id 43 and 0 on all others. Then you sort by priority first.
SELECT mytable.*, IF(id = 43, 1, 0) AS priority FROM mytable ORDER BY priority DESC, name ASC
精彩评论