我有3个表,tbl_topic,tbl_comment,tbl_user。 我想选择用户创建的所有主题以及他评论的主题,即使他不是创建者。这是我的数据库:
tbl_topic
----------
topic_id
topic_title
user_id
tbl_comment
----------
comment_id
comment_message
user_id
topic_id
tbl_user
----------
user_id
user_name
非常需要它。谢谢!
到目前为止我得到了这个
select * from tbl_topic T inner join tbl_comment C on T.topic_id = C.topic_id inner join tbl_user U on T.user_id = U.user_id GROUP BY T.topic_id
我的问题是它只返回对其有评论的主题。我希望包含用户创建的主题,即使它有0条评论。
我希望结果如下:
+-----------+-----------+----------+-------------+----------------+----------+-------
| topic_id | topic_title | user_id | comment_id | comment_message | user_id | topic_id |
+-----------+-----------+----------+-------------+----------------+----------+--------
| 1 | my topic | 1 | 1 | comment me | 1 | 1
| 2 | others | 2 | 2 | comment me | 1 | 2
| 3 | my nocoment| 1 | NULL | NULL | NULL | NULL
+-----------+---------+--------+-------------+----------+----------+---------+--------
----------+-----------+
user_id | user_name |
-----------+-----------
1 | me |
2 | someone |
1 | me
-----------+---------+--
我搞砸了我的表中的字段,comment_message旁边的user_id应该是comment_user_id,但我已经以这种方式创建了我的数据库。你能帮忙做到这一点吗?
答案 0 :(得分:2)
下面的查询在子查询中使用UNION
。 first SELECT
获取用户创建的所有主题。 第二个 SELECT
语句获取用户的所有注释并将其连接到表tbl_topic
,以便我们获取topic_title
。
SELECT topic_ID, topic_title
FROM
(
SELECT a.user_ID, b.topic_ID, b.topic_title
FROM tbl_user a
INNER JOIN tbl_topic b
ON a.user_ID = b.user_ID
UNION
SELECT a.user_ID, c.topic_ID, c.topic_title
FROM tbl_user a
INNER JOIN tbl_comment b
ON a.user_ID = b.user_ID
INNER JOIN tbl_topic c
ON b.topic_ID = c.topic_ID
) x
WHERE x.user_ID = ?
答案 1 :(得分:0)
尝试以下查询。这将显示所有字段。
SELECT tt.*, tc.*, tbl_user.*
FROM tbl_topic AS tt INNER JOIN tbl_comment AS tc ON tt.topic_id = tc.topic_id INNER JOIN tbl_user as tc ON tc.user_id = tu.user_id;
WHERE tu.user_id = x
如果必须过滤添加到查询的WHERE
子句。
答案 2 :(得分:0)
使用左连接。但是还有一个问题,你只能获得一个表评论和一个用户。要获得更多信息,您可以使用GROUP_CONCAT函数,例如:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
select * from tbl_topic T
LEFT JOIN tbl_comment C on T.topic_id = C.topic_id
LEFT join tbl_user U on T.user_id = U.user_id
WHERE T.user_id = x
GROUP BY T.topic_id
编辑:缺少where子句