我正在尝试使用IN
运算符从我的mysql数据库运行查询。
SELECT usernum FROM usergroup WHERE emailmain IN ('blah@blah.com', 'rawr@rawr.com', 'e@e.com')
查询有效,但不是按输入的顺序输出usernum
值,而是按降序输出。这是有问题的,因为我需要它们与电子邮件对齐。我认为这可能与limit
运算符或使用ORDER BY emailmain
有关。我已经尝试过了,但它仍然无效,因为假设数据库中不存在电子邮件,它将不对应于数组中的内存位置。
对我来说最重要的是我知道数据库中没有的电子邮件。
任何帮助将不胜感激!
答案 0 :(得分:1)
您可以使用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')
答案 1 :(得分:1)
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 ...
返回每个结果中的两个字段并将它们与应用程序端相关联可能会更安全。
答案 2 :(得分:1)
如果要动态创建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
答案 3 :(得分:0)
为什么您不只是从数据库中选择用户名和电子邮件?
SELECT usernum, emailmain FROM usergroup WHERE emailmain IN ('blah@blah.com', 'rawr@rawr.com', 'e@e.com') ORDER BY emailmain DESC
答案 4 :(得分:0)
提供IN
条件并不意味着订单。
要订购结果,请在查询结束时使用ORDER BY
。