2013-12-07 22 views
0

DB结构MySQL的联盟和左的连接组合

users 
------ 
user_id 
contact_person 
company 
timestamp 

trading 
-------- 
user_id 
timestamp 
buying_selling 

我试图找到最有效的方式来查询

我希望建立事件的时间表,在提取数据从DB我注册和交易委员会。

两者都有,我需要整理和用户信息添加(谁发布/加盟)

用户信息表还具有当他们加入的时间戳的时间戳。

我与查询挣扎,这就是我想我需要(语法不正确作为即时通讯不知道如何做到这一点)

SELECT user_id, timestamp, 'signup' as type FROM users 
UNION 
SELECT user_id, timestamp, 'trade' as type FROM trading 
lEFT JOIN 
company, contact_person FROM users 
ON user_id 

这是我试了一下(不完全正确)

SELECT 
* 
FROM 
users 
LEFT JOIN 
(
SELECT user_id, timestamp, 'signup' as type FROM users 
UNION 
SELECT user_id, timestamp, 'trade' as type FROM trading 
) foo ON users.user_id = foo.user_id 

我一起看了其他帖子,但它不完全正确,因为它拉扯所有的用户信息,我最终得到了两个我不能订购的时间戳。

+0

你'LEFT JOIN'语法是在你张贴第一个查询不正确。如果您可以提供关于公司的结构/关系以及联系人表格与交易表格的信息,我可以为您的联合查询提供适当的语法。 –

+0

我已经更新了基本的表结构,我试图列出id,时间戳以及它是注册还是交易。一旦我有我的列表 - 左用户用户ID加入用户信息。所有的行都需要按时间戳排序desc – Jeff

回答

2

尝试这种方式

SELECT user_id, contact_person, company, timestamp, 'signup' type 
    FROM users 
UNION ALL 
SELECT t.user_id, u.contact_person, u.company, t.timestamp, 'trade' 
    FROM trading t JOIN users u 
    ON t.user_id = u.user_id 
ORDER BY timestamp 

这里是SQLFiddle演示

+0

Boomtown - 谢谢彼得 – Jeff

+0

@Jeff你很受欢迎。祝你好运 :) – peterm