我正试图使用IN
运算符从mysql数据库中运行一个查询。
SELECT usernum FROM usergroup WHERE emailmain IN ('blah@blah.com', 'rawr@rawr.com', 'e@e.com')
查询可以工作,但不是按输入的顺序输出usernum
值,而是按降序输出。这是有问题的,因为我需要它们与电子邮件保持一致。我认为这可能与limit
运算符或使用ORDER BY emailmain
有关。我试过了,但仍然不起作用,因为假设数据库中不存在电子邮件,它就不会与数组中的内存位置相对应。
对我来说,最重要的是我知道数据库中没有的电子邮件
任何帮助都将不胜感激!
如果您正在动态创建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
您可以使用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 usergroup WHERE emailmain IN ('blah@blah.com', 'rawr@rawr.com', 'e@e.com') ORDER BY emailmain DESC
提供IN
条件并不意味着订单。
要排序结果,请在查询结束时使用ORDER BY
。