SQL SELECT ...按结果顺序 [英] SQL SELECT... IN result order

查看:202
本文介绍了SQL SELECT ...按结果顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是场景-我有一张桌子

Here is the scenario - I have a table

CREATE TABLE IF NOT EXISTS `stylemaps` (
`zyid` varchar(9) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
`styid` varchar(9) CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'zzzz0000Z',
UNIQUE KEY `zyid` (`zyid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

此表中的一组典型条目可能是

A typical set of entries in this table might be

zyid        styid
qrst1234    abcd1230
abcd9876    abcd1231
pqzx4569    abcd1232
bcde0000    abcd1233

即zyid的条目顺序是相当随机的.

i.e. the order of entries for zyid is fairly random.

现在假设我发出

SELECT styid FROM `styles` WHERE zyid in ['abcd9876','bcde0000']

我得到的结果是

abcd1231
abcd1233

即这些行的排序方式与SQL语句中的 IN 子句相同.

i.e. the rows are ordered in the same way as the IN clause my SQL statement.

我的问题是-我可以一直这样吗(只要我正确地订购了IN子句条目)?

My question is this - can I rely on this always being the case (so long as I order the IN clause entries correctly)?

如果此操作失败,并且我错误地映射了样式,则最终结果可能会完全乱码.替代方法是

If this ever fails and I end up mapping styles incorrectly the end results are liable to be completely garbled. The alternative would be to do

SELECT zyid,styid

代替

SELECT styid

,然后对结果做更多​​工作以确保正确的映射.

and then do some more work on the results to guarantee the right mapping.

推荐答案

您可以尝试:

  SELECT styid
    FROM `styles` 
   WHERE zyid IN ['abcd9876','bcde0000']
ORDER BY FIELD(zyid, 'abcd9876','bcde0000')

这篇关于SQL SELECT ...按结果顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆