Answers:
SELECT id, name
FROM mytable
WHERE name IN ('B', 'A', 'D', 'E', 'C')
ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C')
该场函数返回字符串的剩余列表中的第一个字符串的位置。
但是,在性能上要好得多,先有一个索引列代表您的排序顺序,然后再按此列进行排序。
FIELD(letter, 'A', 'C')
,列表将首先返回以B字母开头的条目(假设一组具有A | B | C
值的记录)。为了避免这种情况,请反转列表并使用DESC,即FIELD(letter, 'C', 'A') DESC
。
此处的另一个选项:http : //dev.mysql.com/doc/refman/5.0/en/sorting-rows.html
select *
from tablename
order by priority='High' DESC, priority='Medium' DESC, priority='Low" DESC;
因此,在您的情况下(未经测试)
SELECT id, name
FROM mytable
WHERE name IN ('B', 'A', 'D', 'E', 'C')
ORDER BY name = 'B', name = 'A', name = 'D', name = 'E', name = 'C';
根据您的操作,我发现它有些古怪,但是在玩了一点之后总能使它正常工作。
尝试类似的东西
... ORDER BY (CASE NAME WHEN 'B' THEN 0 WHEN 'A' THEN 1 WHEN ...
可能这可以帮助某人(SP中传递了p_CustomerId):
SELECT CompanyAccountId, CompanyName
FROM account
LEFT JOIN customer where CompanyAccountId = customer.AccountId
GROUP BY CompanyAccountId
ORDER BY CASE WHEN CompanyAccountId IN (SELECT AccountId
FROM customer
WHERE customerid= p_CustomerId)
THEN 0
ELSE 1
END, CompanyName;
说明:我想显示帐户列表。我在这里通过一个客户ID。现在,它将列出带有链接到该客户的帐户的帐户名称,并在顶部显示其后,然后按字母顺序排列其他帐户。