簡體   English   中英

來自MySQL的訂單

[英]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_numberCHARVARCHAR數據類型,並且您要按數值排序而不是對字符串表示形式進行排序,那將“起作用”。

還有其他一些表達式可以達到等效的效果,可以將字符串表示形式轉換為數值。 “添加零”把戲是最短的解決方法,只是將語句添加了兩個字符。

通常,我們傾向於將數字值存儲在用數字數據類型(整數,十進制,浮點數)聲明的列中,而不是將它們存儲為字符串。 這樣,我們就可以避免您在訂購時報告的問題。


顯示返回行的順序非常奇怪。

你是積極的, 10被訂購后12 如果將其作為字符串值進行排序/排序,則我們希望字符串值1011之前。 報告返回行的順序非常奇怪。

(如果您報告返回的行的順序是正確的,那么我懷疑第二個字符實際上是大寫'O'而不是零的'0'

如果真是這樣,那么+0技巧會將'1O'+0 (一個和大寫的O)轉換為數值1 ,因此將等同於'1'+0 ,其結果也將等於1

轉換成int

ORDER BY CAST(ranks.rank_number AS Numeric(10,0)) ASC

Sql Server查詢varchar數據類型,如int

暫無
暫無

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

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