我想查询来自两个“内容”表和一个“用户”表的结果。
两个主要内容文件具有相同的字段名称,但字段不同 - 其中一个表用于注册成员发表的评论,另一个用于客人评论。
将“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部分正在调整我。很想有人告诉我如何做到这一点。感谢。
答案 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