2014-10-30 21 views
1

我正在使用MYSQL查詢,它使用公式來確定行的相似性,然後根據它們的差異對它們進行排序。查詢工作完美,但現在我正在嘗試引入LIMIT,我遇到了麻煩。我的原始查詢如下。MYSQL - 如何使用ORDER BY和LIMIT對列進行排序,然後按另一列對這些結果進行排序

SELECT t2.*, ABS(t1.v1-t2.v1)+ABS(t1.v2-t2.v2)+ABS(t1.v3-t2.v3) AS diff 
FROM (SELECT * FROM tbl WHERE id=1) AS t1 
JOIN tbl AS t2 ON t1.id <> t2.id 
ORDER BY diff; 

現在我介紹了一個LIMIT表達式和兩個ORDER BY語句,它不能正常工作。我的最終目標是加入如上所述的表格,然後按id行對錶格進行排序,將結果限制爲10,然後通過diff ASC對錶格進行排序。一切工作正常,直到差異的最後ORDER BY,它正在排序ID列,然後顯示前10個結果,但不是通過差異重新排序結果。我一直在努力:

SELECT t2.*, ABS(t1.v1-t2.v1)+ABS(t1.v2-t2.v2)+ABS(t1.v3-t2.v3) AS diff 
FROM (SELECT * FROM tbl WHERE id=1) AS t1 
JOIN tbl AS t2 ON t1.id <> t2.id 
ORDER BY id, diff LIMIT 10; 

就像我以前說過,上面只是查詢以保持健康的ID進行排序行和結果限制爲10,但不執行最後的ORDER BY DIFF。

在此先感謝您的幫助!

+2

只需在另一個select語句中包裝整個select:'select * from <當前select語句> by diff'。 – Andrew 2014-10-30 21:10:36

+1

@Andrew,請將其作爲回答發佈。 – Rahul 2014-10-30 21:29:12

回答

1

這是你想要的嗎?

SELECT t.* 
FROM (SELECT t2.*, ABS(t1.v1-t2.v1)+ABS(t1.v2-t2.v2)+ABS(t1.v3-t2.v3) AS diff 
     FROM tbl t1 JOIN 
      tbl t2 
      ON t1.id <> t2.id and t1.id = 1 
     ORDER BY t2.id 
     LIMIT 10 
    ) t 
ORDER BY diff; 

您有position在您的查詢中。我不知道那是什麼。此外,t1的子查詢是不必要的。您可以在on條款中包含id

+0

opps抱歉,您是對的!我的意思是編號不是 – Brandon 2014-10-30 21:50:45

+0

就是這樣!謝謝Gordon! – Brandon 2014-10-30 21:58:01

相關問題