[英]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.