MySQL ORDER BY поле с переключателем - PullRequest
0 голосов
/ 14 июня 2019

У меня есть MySQL результат, который выглядит следующим образом:

| compare | field1 | field2 | much more |
-----------------------------------------
|   new   |    x1  |    y   | ...       |
|   old   |    x1  |    y   | ...       |
|   old   |    x2  |    y   | ...       |
|   new   |    x2  |    y   | ...       |

Запрос выполняет поиск различий двух таблиц (новой и старой) и упорядочивает их по field1 (с гораздо большим количеством полей, но здесь все будет проще). Итак, запрос возвращает все правильно, кроме одной вещи: в запросе есть UNION ALL с FIRST, который извлекает старый, а затем UNION ALL - во ВТОРОЙ новый.

То, что я хочу получить, - это результат, в котором мое «сравнение» ВСЕГДА имеет ПЕРВЫЙ старый, а затем новый. Но посмотрите на мой результат, иногда я сначала получаю новый, и это нарушит остальную часть кода.

Я попробовал это с

ORDER BY FIELD(compare, 'old', 'new'), ...

но это не сработало.

Кто-нибудь с идеей? Результат должен быть таким:

| compare | field1 | field2 | much more |
-----------------------------------------
|   old   |    x1  |    y   | ...       |
|   new   |    x1  |    y   | ...       |
|   old   |    x2  |    y   | ...       |
|   new   |    x2  |    y   | ...       |

Редактировать # 1:

Вот полный запрос для этого:

SELECT
  MIN(compareTables) AS 'table',
  CONCAT(ObjNr, PFKt, WhgNr, DatVon, AdrNr, KEY_Firma) AS 'primary',
  ObjNr,
  PFKt,
  WhgNr,
  DatVon,
  DatBis,
  AdrNr,
  KEY_Firma,
  Info,
  PKto,
  FI_MieterPKto,
  PFktArtEigMiet,
  ST_SchlAustriaPKto,
  inaktiv,
  inaktivBis
FROM ((SELECT
      'old' AS compareTables,
      ObjNr,
      PFKt,
      WhgNr,
      DatVon,
      DatBis,
      AdrNr,
      KEY_Firma,
      Info,
      PKto,
      FI_MieterPKto,
      PFktArtEigMiet,
      ST_SchlAustriaPKto,
      inaktiv,
      inaktivBis
    FROM table_old.PF_PFkt) UNION ALL (SELECT
      'new' AS compareTables,
      ObjNr,
      PFKt,
      WhgNr,
      DatVon,
      DatBis,
      AdrNr,
      KEY_Firma,
      Info,
      PKto,
      FI_MieterPKto,
      PFktArtEigMiet,
      ST_SchlAustriaPKto,
      inaktiv,
      inaktivBis
    FROM table_new.PF_PFkt)) AS compareTables
WHERE 'primary' IS NOT NULL
GROUP BY ObjNr,
         PFKt,
         WhgNr,
         DatVon,
         DatBis,
         AdrNr,
         KEY_Firma,
         Info,
         PKto,
         FI_MieterPKto,
         PFktArtEigMiet,
         ST_SchlAustriaPKto,
         inaktiv,
         inaktivBis
HAVING COUNT(*) = 1
ORDER BY ObjNr, PFKt, WhgNr, DatVon, AdrNr, KEY_Firma

и часть результата result_of_query

Ответы [ 3 ]

3 голосов
/ 14 июня 2019

Первый заказ field1.Затем сделайте заказ по убыванию compare, чтобы получить старый до новый .

ORDER BY field1, compare DESC
0 голосов
/ 14 июня 2019

Попробуйте это:

order by (field1, field2 DESC), compare = 'OLD' DESC
0 голосов
/ 14 июня 2019

Вы хотите что-то вроде этого:

order by field1, field2, (compare = 'OLD') DESC
...