2015-03-01 2 views
0

У меня есть база данных, где хранятся рабочие и три различные задачи, которые они могут выполнить. В каждой таблице задач хранится, какой рабочий выполнял эту задачу, когда и сколько времени потребовалось.Последняя дата для каждого идентификатора, в таблице объединений

Так таблицы выглядят следующим образом:

Рабочий стол:

------------------------- 
|worker_id | worker_name| 
|----------|------------| 
|   |   | 

таблицы задач:

------------------------------------ 
|task_id | worker_id | date | time | 
|--------|-----------|------|------| 
|  |   |  |  | 

Каждая таблица задача выглядит, как указано выше, называется task1, task2, Task3. Невозможно иметь их в одной таблице, так как каждая задача имеет другие столбцы, специфичные для себя, которые не нужны для этого объединения, но используются в другом месте.

Объединение трех таблиц задач, которые будут использоваться следующим образом:

SELECT `date`, time FROM task1 
UNION ALL SELECT `date`, time FROM task2 
UNION ALL SELECT `date`, time FROM task3 

Как бы один идти о написании отборного заявления, используя вышеупомянутый союз, чтобы вернуться каждый рабочий идентификатор и имя, наряду с дату и продолжительность их последней задачи.

Я попытался с помощью выбранного ответа от следующего вопроса, но заменяя таблицу wp_posts с объединением трех таблиц задач, без успеха: MySQL order by before group by

+0

У меня все равно будет одна основная таблица задач. – Strawberry

+0

Как бы вы справлялись с различными задачами, имеющими разные столбцы? – user4370541

+0

Имейте данные приложения в отдельных таблицах так же, как вы предлагаете, но просто сохраняйте общие данные в одном месте. – Strawberry

ответ

0

я собираюсь рекомендовать substring_index()/group_concat() трюк:

SELECT userid, max(date) as date, 
     substring_index(group_concat(time order by date desc), ',', 1) as time 
FROM (SELECT userid, `date`, time FROM task1 UNION ALL 
     SELECT userid, `date`, time FROM task2 UNION ALL 
     SELECT userid, `date`, time FROM task3 
    ) u 
GROUP BY userid; 

Это преобразует time в строку. Возможно, вы захотите использовать date_format(), если хотите, в определенном формате.

+0

Spot on - похоже, предлагает гораздо более простое решение, чем связанный вопрос! – user4370541

+0

SELECTs в UNION не имеют одинакового количества полей. Добавьте идентификатор пользователя в начале второго и третьего. –

+0

@ RickJames. , , Спасибо. –

Смежные вопросы