2016-10-28 134 views
0

當進行查詢時,我在排序記錄時遇到了一些奇怪的結果。 這些記錄有一個「訂單」列,但是目前它們全部設置爲0.MySQL奇怪的排序行爲

當我將結果集限制爲15時,所有內容都如預期的那樣。只有當我將限制設置爲16,recordorder進入瘋狂......

我知道我可以用一個額外的訂單價值修復它,但我想知道爲什麼會這樣...

LIMIT 15 LIMIT 15

LIMIT 16 LIMIT 16

+2

的結果是正確的......在這兩個你只按訂單訂貨的情況下..如果你需要,你可以添加更多然後到您的訂單通過如柱:ORDER BY order,product_id – scaisEdge

回答

2

沒有問題。你很簡單的認識到,在MySQL中(和SQL一般)order by不是穩定。這意味着具有綁定值的鍵可以以任意順序出現。因此,同一查詢的兩個不同運行可以產生不同的結果。

爲什麼SQL排序不穩定?原因很簡單:SQL表和結果集代表無序集。沒有可用的信息來創建穩定的排序。在無序集合上是沒有意義的。

修復?這很容易。只需添加所需的鍵:

order by `order`, product_id 
+1

有一個很好的理由有無序集:必須維持這樣的秩序將意味着永久的性能損失。 –

+0

那麼,從16個我的處理器的限制做一些unlogic思考? ;) – Milkmannetje

+1

@Milkmannetje它只是提取符合條件的記錄,並且得到的速度更快:) –

1

您的訂單:

ORDER BY `order` ASC 

...因爲有關係是不確定的。您應該添加一些附加標準來撤消這些關係,例如一些獨特的鍵或主鍵:

ORDER BY `order` ASC, product_id