mySQL> справка для сложного заказа по запросу - PullRequest
2 голосов
/ 06 июня 2011

Я не эксперт по SQL, поэтому я прошу здесь некоторую помощь по следующему случаю:

У меня есть 2 таблицы; 1 таблица «задача» (ID,TITLE,CREATEDAT) и 1 таблица «активность» (ID,TASK_ID,TITLE,CREATEDAT), где CREATEDAT - это столбец DATETIME.

Я бы хотел перечислить упорядочивание задач по последнему столбцу CREATEDAT, по задачам и действиям! Я имею в виду, есть самая последняя задача (CREATEDAT AND, которая имеет самую последнюю активность, такую ​​как объединение таблицы задач и действий ...), но я действительно не знаю, как обрабатывать?

Спасибо вам за помощь!

Ответы [ 3 ]

2 голосов
/ 06 июня 2011
SELECT * FROM `task` T1 
    JOIN `activity` T2 ON T1.ID = T2.TASK_ID
    ORDER BY T1.CREATEDAT, T2.CREATDAT DESC
2 голосов
/ 06 июня 2011

Чтобы упорядочить задачи по самой последней активности или дате создания, если в ней нет активности:

SELECT t.id, t.title 
  FROM task AS t
    LEFT JOIN activity AS a ON t.id=a.task_id
  GROUP BY t.id
  ORDER BY COALESCE(MAX(a.createdat), t.createdat) DESC
1 голос
/ 06 июня 2011

Я думаю, это то, что вы ищете, если хотите показать все задачи, даже если у них нет действий.

sekect task.id, task.title, activity.id, activity.title
from task
left join activity
order by task.createdat, activity.createdat desc

edit: я приведу краткое объяснение, которое может помочь вам понять немного больше.

Этот оператор в основном говорит базе данных собирать всю информацию в определенных столбцах "id" и "title" в таблице задач и таблице действий - это предложение sekect task.id, task.title, activity.id, activity.title.

Любой запрос всегда будет искать хотя бы одну таблицу, используя ключевое слово from. В этом случае мы использовали from task, который будет искать таблицу задач. Однако для этого примера вам потребовалось объединение двух таблиц, требующих использования ключевого слова join. Использование join позволяет искать несколько таблиц несколькими способами. Мы использовали left join в этом случае; прокомментируйте, если хотите получить дополнительное объяснение по этому поводу.

Наконец, мы просто упорядочили данные по дате создания задачи, а затем по дате создания операции и указали нисходящий порядок (сначала самый старый, самый последний последний).

Обратите внимание, что, как правило, использование select * не лучшая идея. Теперь это может удовлетворить ваши потребности, но если вы собираетесь создавать больше запросов, вам нужно указать столбцы, которые вы хотите отобразить, как в моем примере.

...