MYSQL:帮助查询三个表的结果

时间:2013-03-31 17:56:45

标签: mysql join

我想查询来自两个“内容”表和一个“用户”表的结果。

两个主要内容文件具有相同的字段名称,但字段不同 - 其中一个表用于注册成员发表的评论,另一个用于客人评论。

将“widgetID”视为我试图循环注释的小部件的主要标识。同样,“有效”是0还是1,表示它是否被批准可见。

table_widget: ID 约会时间 usersID 信息 活性

table_member_comments: ID 约会时间 为widgetid usersID 信息 活性

table_guest_comments: ID 约会时间 为widgetid usersName UsersEmail 信息 活性

table_users:

ID 约会时间 usersID 全名 活性

所以我一直想弄清楚的是如何一起查询两个表,最终得到一个结果,用于循环并显示成员和公共评论。

我很确定我需要做一个JOIN,我已经尝试过并且未能绕过正确的程序。

我需要在这里做JOIN的初始SELECT ...我没有得到...... WHERE widgetID =? AND u.active ='1'ORDER BY DateTime DESC LIMIT 0,100

它在中间的darn部分正在调整我。很想有人告诉我如何做到这一点。感谢。

2 个答案:

答案 0 :(得分:1)

此处的连接不是最佳选择,您需要使用UNION,它将组合数据而不是将它们连接在一起。

例如:

SELECT mydata.message FROM
(
SELECT datetime, message FROM table_member_comments WHERE widgetID = 100 AND active = 1
UNTION ALL
SELECT datetime, message FROM table_guest_comments WHERE widgetID = 100 active = 1
) mydata
ORDER BY mydata.datetime ASC

答案 1 :(得分:1)

使用UNION将另一个查询的结果添加到同一结果集:

SELECT   a.*
FROM     (
         SELECT c.message, c.datetime, u.fullName
         FROM   table_member_comments c
         JOIN   table_users u ON c.usersID = u.usersID
         WHERE  c.widgetID = ? AND c.active = 1

         UNION ALL

         SELECT message, datetime, usersName
         FROM   table_guest_comments
         WHERE  widgetID = ? AND active = 1
         ) a
ORDER BY a.datetime DESC 
LIMIT    0,100