簡體   English   中英

MySQL ORDER BY IN()

[英]MySQL ORDER BY IN()

我有一個 PHP 數組,里面有許多 ID。 這些號碼已經訂購。

現在我想通過 IN() 方法得到我的結果,得到所有的 ID。

但是,這些 ID 應該像在 IN 方法中一樣排序。

例如:

IN(4,7,3,8,9)  

應該給出如下結果:

4 - Article 4  
7 - Article 7  
3 - Article 3  
8 - Article 8  
9 - Article 9

有什么建議么? 也許有一個功能可以做到這一點?

謝謝!

我認為您可能正在尋找函數FIELD——雖然通常被認為是一個字符串函數,但它也適用於數字!

ORDER BY FIELD(field_name, 3,2,5,7,8,1)

您可以使用FIELD()

ORDER BY FIELD(id, 3,2,5,7,8,1)

返回 str 在 str1, str2, str3, ... 列表中的索引(位置)。 如果未找到 str,則返回 0。

不過,這有點丑陋,所以只有在別無選擇的情況下才真正使用它。 在您的應用程序中對輸出進行排序可能會更好。

標准 SQL 不提供執行此操作的方法(MySQL 可以,但我更喜歡供應商中立的解決方案,因此我可以隨時切換 DBMS)。

這是返回結果集在后處理中應該做的事情。 SQL 只能以“order by”子句中指定的順序返回它們(或者如果沒有這樣的子句,則以任何順序返回)。

另一種可能性(雖然我不喜歡它,但我很榮幸能給你選擇)是多次訪問數據庫,每個 ID 一次,並在它們進入時處理它們:

select * from tbl where article_id = 4;
// Process those.
select * from tbl where article_id = 7;
// Process those.
: : : : :
select * from tbl where article_id = 9;
// Process those.

您只需要按語句給出正確的順序。

SELECT ID FROM myTable WHERE ID IN(1,2,3,4) ORDER BY ID

您為什么要像您的示例中那樣對數據進行無序排序?

如果您不介意連接長查詢,請嘗試這種方式:

SELECT ID FROM myTable WHERE ID=1
UNION
SELECT ID FROM myTable WHERE ID=3
UNION
SELECT ID FROM myTable WHERE ID=2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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