2015-10-28 108 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;";