2014-10-28 74 views
0

我有一個SQL查詢的問題。我希望我的結果按升序排序,但問題是DB只按照第一個數字對結果進行排序,而邏輯上,2應該在19之前。SQL Order by ... ASC

這裏是我的請求,其結果不走所有的截圖:

SELECT * FROM mail WHERE titre LIKE '%$mot%' ORDER BY mail.titre ASC 

Very bad sort...

我要的是所有的結果進行排序是這樣的:1 2 3 4 5 .. 101 102 103 ... 8845 8850 ...等等。

你對這個問題有想法嗎?

問候。

+0

我猜你切除了與敏感數據的一部分,但它似乎是你的記錄是由管道分隔的數據串charachter。你首先只需要把第一個管道前面的部分轉換爲int,或者只是找到管道的位置「i」並且在字符串和字母順序之前連接ni零,其中「n」足夠大以產生一個結果字符串比第一列中的任何值都大。 – BertuPG 2014-10-28 13:12:17

回答

1

我認爲你的專欄是decalred爲char。所以DBMS按字符串值進行排序。您必須在排序子句中將您的值轉換爲int。

SELECT * FROM mail WHERE titre LIKE '%$mot%' ORDER BY convert(mail.titre, unsigned integer) ASC 
+0

完美,它能正常工作,非常感謝!我知道了! ;) – 2014-10-28 13:03:35

1

據我所看到的現場是一個varchar /文本......所以他們正確地排序,你就必須投領域(如果可能)

例子:

SELECT * FROM mail WHERE titre LIKE '%$mot%' ORDER BY CAST(mail.titre AS int) ASC 
+0

非常好的主意非常感謝!我得到了錯誤! :D – 2014-10-28 13:04:11

3

不會這樣做。您有字符串/字符[]列,並且您只查找有關數字的作品。 如果可能,您需要將此列轉換爲數字。

您可以使用轉換:

CAST(mail.titre,int) 

例子在這裏: Converting text column to integer in MySQL

+0

好主意,@Jens找到完美的查詢,就像你一直在說你和羅伯特一樣! :d – 2014-10-28 13:05:40