2014-01-16 3 views
0

У меня есть 2 таблицыMYSQL создать представление, которые показывают данные из двух таблиц

deposits 
id |userId | amount| Date 
1 | 2 | 150 | 2013-11-22 02:57:00 
2 | 3 | 230 | 2013-11-25 03:19:00 

withdrawals 
id |userId | amount| Date 
1 | 2 | 150 | 2013-11-23 02:57:00 
2 | 3 | 190 | 2013-11-27 02:27:00 

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

depositsAndWithdrawal 
type  | id | userId| amount | Date 
deposit  | 1 | 2 |  150 | 2013-11-22 02:57:00 
withdrawal | 1 | 2 |  150 | 2013-11-23 02:57:00 
deposit  | 2 | 3 |  230 | 2013-11-25 03:19:00 
withdrawal | 2 | 3 |  190 | 2013-11-27 02:27:00 

Возможно ли это? или мне нужно создать новую таблицу и использовать событие on insert для добавления соответствующей строки в эту таблицу?

ответ

0

Вы ищете запрос union all. И вы можете сделать это в представлении MySQL:

create view v as 
    select 'deposit' as which, id, userId, amount, Date 
    from deposits 
    union all 
    select 'withdrawals' as which, id, userId, amount, Date 
    from withdrawals ; 
0

Что-то вдоль линий следующих (извините небольшие ошибки):

create view depositsAndWithdrawal as 
(
    select 'deposits' as type, id, userID, amount, date 
    from deposits 
    UNION 
    select 'withdrawls' as type, id, userID, amount, date 
    from widthdrawls 
) 

Вы можете запросить это с помощью:

select * from depositsAndWithdrawal order by date; 

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

Не работает:

create view depositsAndWithdrawal as 
    (
     select * from 
     (select 'deposits' as type, id, userID, amount, date 
     from deposits 
     UNION 
     select 'withdrawls' as type, id, userID, amount, date 
     from widthdrawls) as temp order by date 
    ) 

Но вы могли бы разделить проблему на две точки зрения:

create view depositsAndWithdrawalTemp as 
    (
     select 'deposits' as type, id, userID, amount, date 
     from deposits 
     UNION 
     select 'withdrawls' as type, id, userID, amount, date 
     from widthdrawls 
    ) 

create view depositsAndWithdrawal as 
select * from depositsAndWithdrawalTemp order by date; 
Смежные вопросы