1

我想从两个“内容”表和一个“用户”表中查询结果。

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

将“widgetID”视为我试图循环浏览评论的小部件的主要标识。同样,“活动”是 0 或 1,表示它是否已被批准为可见。

table_widget: id datetime usersID message active

table_member_comments: id datetime widgetID usersID message active

table_guest_comments: id datetime widgetID usersName UsersEmail message active

表用户:

id datetime usersID fullName active

所以我一直想弄清楚的是如何同时查询这两个表以得到一个结果,用它来循环和显示成员和公众评论。

我很确定我需要做一个 JOIN,并且我已经尝试过但未能围绕正确的程序来解决问题。

我需要在此处使用我没有得到的 JOIN 进行初始 SELECT ... WHERE widgetID = ?AND u.active = '1' ORDER BY DateTime DESC LIMIT 0, 100

它在中间的该死的部分让我在这里调整。希望有人告诉我如何做到这一点。谢谢。

4

2 回答 2

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
于 2013-03-31T18:13:08.297 回答
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
于 2013-03-31T18:13:34.330 回答