2013-08-21 3 views
0

У меня есть две таблицы MySQL, как с отметкой времени (DATE/TIME) ... Мне нужен запрос, чтобы объединить их и отсортировать их вместе по метке времени (2013-08-21) 13:13:47).Сочетание/Сортировка двух таблиц/массивов таблицы/массивов/списков

Table 1 
--------------------------------------- 
Timestamp | Col 1 | Col 2 | Col 3 


Table 2 
--------------------------------------- 
Timestamp | Col 1 | Col 2 | Col 3 | Col 4 

Я хочу, чтобы распечатать

PRINT OUT (in order by timestamp) 
---------------- 
Timestamp | Col 1 | Col 2 | Col 3 | Col 4 
Timestamp | Col 1 | Col 2 | Col 3 
Timestamp | Col 1 | Col 2 | Col 3 
Timestamp | Col 1 | Col 2 | Col 3 | Col 4 
Timestamp | Col 1 | Col 2 | Col 3 
Timestamp | Col 1 | Col 2 | Col 3 | Col 4 
Timestamp | Col 1 | Col 2 | Col 3 
Timestamp | Col 1 | Col 2 | Col 3 | Col 4 
Timestamp | Col 1 | Col 2 | Col 3 | Col 4 

Что это самый простой способ сделать это? Должен ли я помещать две таблицы в массив, а затем сортировать? или я должен делать это с помощью sql-запроса?

Я использую PHP MySQL & ...

+0

Как вы намереваетесь установить значение отметки времени в столбце 4? Совместимы ли типы? –

+0

@GordonLinoff, вот как выглядит форматирование здесь, мое намерение - иметь временную метку в том же col ... извините. –

+0

@ GordonLinoff также, вот что выглядит печать ... Мне нужно только распечатать его ... не хранить, поэтому тип не имеет значения. –

ответ

2

Предполагая, что Table1.Col1 имеет тот же тип данных, как Table2.Col1, Table1.Col2 имеет тот же тип данных, как Table2.Col2 и т.д., то это, наверное, самый простой способ. Таблицы в объединении должны иметь одинаковое количество столбцов. Я использую NULL, чтобы заменить Col4. Возможно, вам нужны дополнительные столбцы в предложении ORDER BY.

select T1.Timestamp, T1.Col1, T1.Col2, T1.Col3, NULL as Col4 
from Table1 
union all 
select T2.Timestamp, T2.Col1, T2.Col2, T2.Col3, T2.Col4 
from Table2 
order by Timestamp 

Имеет смысл сделать это, только если одинаково названные столбцы имеют одинаковые данные. Если Table1.Col1 содержит имена, а Table2.Col1 содержит номера телефонов, это не имеет большого смысла для этого.

0

Я бы использовал объединение MySQL для этого. Запрос, как это сделать:

(
    SELECT 
    id, 
    NULL AS col, 
    time 
    FROM 
    table1 
) 
UNION 
(
    SELECT 
    id, 
    col, 
    time 
    FROM 
    table2 
) 
ORDER BY time 

Таким образом, ваш результирующий набор будет содержать все те же столбцы, где, как если бы вы делали это в двух запросов с PHP вы могли бы закончить с nonexistant индексов, а также его более медленным.

Вот SQLFiddle: http://sqlfiddle.com/#!2/f7416/10

0

Что это самый простой способ сделать это? Должен ли я помещать две таблицы в массив, а затем сортировать? или я должен делать это с помощью sql-запроса?

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

Поэтому вы не делаете этого самостоятельно, но пусть ваша база данных выполняет эту работу.

Итак, вы делаете это с SQL-запросом. Скорее всего, UNION and ORDER BY, как описано в руководстве вашей базы данных.

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