當進行查詢時,我在排序記錄時遇到了一些奇怪的結果。 這些記錄有一個「訂單」列,但是目前它們全部設置爲0.MySQL奇怪的排序行爲
當我將結果集限制爲15時,所有內容都如預期的那樣。只有當我將限制設置爲16,recordorder進入瘋狂......
我知道我可以用一個額外的訂單價值修復它,但我想知道爲什麼會這樣...
當進行查詢時,我在排序記錄時遇到了一些奇怪的結果。 這些記錄有一個「訂單」列,但是目前它們全部設置爲0.MySQL奇怪的排序行爲
當我將結果集限制爲15時,所有內容都如預期的那樣。只有當我將限制設置爲16,recordorder進入瘋狂......
我知道我可以用一個額外的訂單價值修復它,但我想知道爲什麼會這樣...
沒有問題。你很簡單的認識到,在MySQL中(和SQL一般)order by
不是穩定。這意味着具有綁定值的鍵可以以任意順序出現。因此,同一查詢的兩個不同運行可以產生不同的結果。
爲什麼SQL排序不穩定?原因很簡單:SQL表和結果集代表無序集。沒有可用的信息來創建穩定的排序。在無序集合上是沒有意義的。
修復?這很容易。只需添加所需的鍵:
order by `order`, product_id
有一個很好的理由有無序集:必須維持這樣的秩序將意味着永久的性能損失。 –
那麼,從16個我的處理器的限制做一些unlogic思考? ;) – Milkmannetje
@Milkmannetje它只是提取符合條件的記錄,並且得到的速度更快:) –
您的訂單:
ORDER BY `order` ASC
...因爲有關係是不確定的。您應該添加一些附加標準來撤消這些關係,例如一些獨特的鍵或主鍵:
ORDER BY `order` ASC, product_id
的結果是正確的......在這兩個你只按訂單訂貨的情況下..如果你需要,你可以添加更多然後到您的訂單通過如柱:ORDER BY order,product_id – scaisEdge