[英]mysql IN operator returns values in descending order
我正在尝试使用IN
运算符对我的mysql数据库进行查询。
SELECT usernum FROM usergroup WHERE emailmain IN ('blah@blah.com', 'rawr@rawr.com', 'e@e.com')
该查询有效,但不是按输入的顺序输出usernum
值,而是按降序输出它们。 这是有问题的,因为我需要将它们与电子邮件对齐。 我认为这可能与limit
运算符或使用ORDER BY emailmain
。 我已经尝试过了,但仍然无法正常工作,因为假设数据库中不存在该电子邮件,则该电子邮件将不对应于数组中的内存位置。
对我来说最重要的是,我知道数据库中没有的电子邮件。
任何帮助,将不胜感激!
您可以使用ORDER BY FIELD
来定义您的订单
SELECT usernum
FROM usergroup
WHERE emailmain IN ('blah@blah.com', 'rawr@rawr.com', 'e@e.com')
ORDER BY FIELD (emailmain, 'blah@blah.com', 'rawr@rawr.com', 'e@e.com')
IN
完全不会影响结果的顺序,没有ORDER
子句,行将以找到的顺序返回。
如果需要将结果的顺序与提供的电子邮件列表的顺序匹配,请尝试以下操作:
SELECT usernum
FROM usergroup
WHERE emailmain IN ('blah@blah.com', 'rawr@rawr.com', 'e@e.com')
ORDER BY FIND_IN_SET(emailmain, "blah@blah.com,rawr@rawr.com,e@e.com")
FIND_IN_SET将返回给定字符串在逗号分隔列表中的位置
对于较大的列表,尽管仅使用SELECT usernum, emailmain FROM ...
来返回每个结果中的两个字段并将它们与应用程序端相关SELECT usernum, emailmain FROM ...
可能会更安全。
如果要动态创建IN字符串,则不必每次运行查询时都创建一个表-您可以使用内联视图,其填充方式与IN字符串相同,如下所示:
select v.email, u.usernum
from
(select 'blah@blah.com' email union select 'rawr@rawr.com' union select 'e@e.com') v
left join usergroup u on v.email = u.emailmain
order by v.email
为什么不从数据库中选择用户名和电子邮件?
SELECT usernum, emailmain FROM usergroup WHERE emailmain IN ('blah@blah.com', 'rawr@rawr.com', 'e@e.com') ORDER BY emailmain DESC
提供IN
条件并不表示订单。
要对结果进行排序,请在查询末尾使用ORDER BY
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.