[英]Order from MySQL order
這是MySQL查詢:
$sql = "SELECT users.*, ranks.rank_number
FROM users
INNER JOIN ranks
ON users.rank_name=ranks.rank_name
WHERE users.active= 'y'
ORDER BY ranks.rank_number ASC, users.plvl DESC
LIMIT $start, $limit";
$result = mysql_query($sql);
我想按rank_number
:
1,2,3,4,5,6,7,8,9,10,11,12
從MySQL,但我得到這個:
1,11,12,10,2,3,4,5,6,7,8,9
那么我怎樣才能使其成為1,2,3,4,5,6,7,8,9,10,11,12
?
根據結果,您似乎正在按字母順序排序。 看起來在您的數據庫中,rank_number可能存儲為“ varchar”而不是整數。 在這種情況下,可以將varchar強制轉換為整數,以進行數字排序而不是字母排序。
https://dev.mysql.com/doc/refman/5.0/en/cast-functions.html
SELECT users.*, CAST (ranks.rank_number AS SIGNED) as user_rank
...
order by user_rank ASC
發布表定義將有助於弄清是否確實如此。
對您的語句的最快解決方法是在ORDER BY
子句中的ranks.rank_number
+0
...
ORDER BY ranks.rank_number+0 ASC, ...
^^
如果rank_number
是CHAR
或VARCHAR
數據類型,並且您要按數值排序而不是對字符串表示形式進行排序,那將“起作用”。
還有其他一些表達式可以達到等效的效果,可以將字符串表示形式轉換為數值。 “添加零”把戲是最短的解決方法,只是將語句添加了兩個字符。
通常,我們傾向於將數字值存儲在用數字數據類型(整數,十進制,浮點數)聲明的列中,而不是將它們存儲為字符串。 這樣,我們就可以避免您在訂購時報告的問題。
顯示返回行的順序非常奇怪。
你是積極的, 10
被訂購后12
? 如果將其作為字符串值進行排序/排序,則我們希望字符串值10
在11
之前。 報告返回行的順序非常奇怪。
(如果您報告返回的行的順序是正確的,那么我懷疑第二個字符實際上是大寫'O'
而不是零的'0'
。
如果真是這樣,那么+0
技巧會將'1O'+0
(一個和大寫的O)轉換為數值1
,因此將等同於'1'+0
,其結果也將等於1
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.