2015-10-28 81 views
0

我有這個複雜的Sql查詢,我不能按我的意願訂購。
訂購複雜的MySql查詢

查詢

$query = "SELECT * 
      FROM element_skanning yt1 JOIN 
       (SELECT objekt_nr, element_nr 
        FROM element_skanning 
        WHERE vart IN ('B.Avf', 'R.Avf') 
        GROUP BY objekt_nr, element_nr 
        HAVING count(*) > 1 
       ) yt2 
        ON yt2.objekt_nr = yt1.objekt_nr AND 
        yt2.element_nr = yt1.element_nr 
      WHERE vart IN ('B.Avf', 'R.Avf') 
      ORDER BY 2;"; 

我倒是喜歡用命令:element_nr ASC

我試圖difrent東西,如:

WHERE vart IN ('B.Avf', 'R.Avf') 
GROUP BY objekt_nr, element_nr 
HAVING count(*) > 1 
ORDER BY element_nr ASC 

或:

WHERE vart IN ('B.Avf', 'R.Avf') 
GROUP BY objekt_nr, element_nr 
ORDER BY 2 ASC 
HAVING count(*) > 1 

最後的主查詢ORDER BY 2。這是element_nr
但所有的數據沒有排序。

爲什麼?

+0

發佈您的表格結構,數據源樣本和預期結果。或理想地提供sqlfiddle – Alex

+0

...並向我們展示您所需的輸出。 –

+0

爲什麼在外部'SELECT'中有WHERE vart IN('B.Avf','R.Avf')'時,在子查詢中也是如此? – i486

回答

1

在order by子句中使用列名稱(而不是位置值)總是可取的,以避免由於重新排列列(由於列的新增或刪除)而導致的任何問題,請嘗試以下方法。

$query = "SELECT * 
     FROM element_skanning yt1 JOIN 
      (SELECT objekt_nr, element_nr 
       FROM element_skanning 
       WHERE vart IN ('B.Avf', 'R.Avf') 
       GROUP BY objekt_nr, element_nr 
       HAVING count(*) > 1 
      ) yt2 
       ON yt2.objekt_nr = yt1.objekt_nr AND 
       yt2.element_nr = yt1.element_nr 
     WHERE vart IN ('B.Avf', 'R.Avf') 
     ORDER BY yt2.element_nr;";