簡體   English   中英

mysql IN運算符按降序返回值

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM