SQL-запрос с опечаткой не работает в MySQL (Упорядочить по вычисляемому полю) - PullRequest
0 голосов
/ 24 февраля 2011

У меня есть этот запрос, в котором один из столбцов является расчетным.Все работает, кроме того, что не упорядочивает результаты, когда я использую этот вычисляемый столбец в запросе.Запрос очень большой, поэтому я упростил его ниже для понимания.Здесь вычисляемый столбец является «оставшимся»

SELECT t1.id, t1.name, t2.duration - datediff(now(), t1.posting_time) as "remaining"
  FROM table1 t1, table2 t2
 WHERE td.id = t1.timefield
 ORDER BY id, name, remaining DESC

Даже если я удаляю этот «оставшийся» из порядка по предложению или использую его с asc или desc, ничего не происходит, и порядок не меняется.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

Единственный раз, когда «остальное» изменяет порядок сортировки, это когда идентификатор и имя в двух строках совпадают.В противном случае это не повлияет на порядок.

Вам необходимо исправить опечатку 'td.id' на 't2.id'.

Вам также следует изучить нотацию JOIN:

SELECT t1.id, t1.name, t2.duration - datediff(now(), t1.posting_time) as "remaining"
  FROM table1 t1
  JOIN table2 t2 ON t2.id = t1.timefield
 ORDER BY id, name, remaining DESC
1 голос
/ 24 февраля 2011

используйте трюк:

SELECT *
FROM (
  SELECT
    t1.id, 
    t1.name, 
    t2.duration - datediff(now() , t1.posting_time) as "remaining"
  FROM table1 t1, table2 t2
  WHERE t2.id = t1.timefield
  ) AS i
ORDER BY id, name, remaining DESC
...