我需要从Drupal + phpBB获得大多数评论+帖子的用户列表。
我正在使用mySQL。
Drupal数据库的结构: dr_comments(CID,UID) dr_users(UID,名称)
的phpBB: phpbb_posts(POST_ID,poster_id) phpbb_users(USER_ID,用户名)
我有来自Drupal和phpBB的大多数评论的用户的SQL代码。
Drupal的:
SELECT
U.name,
COUNT(C.cid) AS CommentCount
FROM
dr_users AS U
INNER JOIN dr_comments AS C ON U.uid = C.uid
GROUP BY
U.name
ORDER BY
COUNT(C.cid) DESC
LIMIT 10
phpBB的:
SELECT
U.username,
COUNT(C.post_id) AS CommentCount
FROM
phpbb_users AS U
INNER JOIN phpbb_posts AS C ON U.user_id = C.poster_id
GROUP BY
U.username
ORDER BY
COUNT(C.post_id) DESC
LIMIT 10
我不知道如何将它们合并在一起。
答案 0 :(得分:0)
您可以使用UNION:
SELECT name, SUM(CommentCount) AS TotalCommentCount
FROM (
SELECT U.name, COUNT(C.cid) AS CommentCount
FROM dr_users AS U
INNER JOIN dr_comments AS C ON U.uid = C.uid
GROUP BY U.name
UNION ALL
SELECT U2.username AS name, COUNT(C2.post_id) AS CommentCount
FROM phpbb_users AS U2
INNER JOIN phpbb_posts AS C2 ON U2.user_id = C2.poster_id
GROUP BY U2.username
) temp GROUP BY name
那应该做好自己的工作。注意上面的脚本我希望两个程序的用户名相同。
您还可以查看 SQL Fiddle 。
答案 1 :(得分:0)
您的 ...将它们合并在一起...... 可以通过多种方式进行解释。如果您想简单地将两个结果集联合起来,保持每个结果集的顺序完整,那么您可以执行
(
SELECT u.name,
COUNT(c.cid) CommentCount
FROM dr_users u JOIN dr_comments c
ON u.uid = c.uid
GROUP BY u.name
ORDER BY COUNT(c.cid) DESC
LIMIT 10
)
UNION ALL
(
SELECT u.username,
COUNT(C.post_id) CommentCount
FROM phpbb_users u JOIN phpbb_posts c
ON u.user_id = c.poster_id
GROUP BY u.username
ORDER BY COUNT(c.post_id) DESC
LIMIT 10
)
如果您需要将两个结果集合并,然后重新排序
(
SELECT u.name,
COUNT(c.cid) CommentCount
FROM dr_users u JOIN dr_comments c
ON u.uid = c.uid
GROUP BY u.name
ORDER BY COUNT(c.cid) DESC
LIMIT 10
)
UNION ALL
(
SELECT u.username,
COUNT(C.post_id) CommentCount
FROM phpbb_users u JOIN phpbb_posts c
ON u.user_id = c.poster_id
GROUP BY u.username
ORDER BY COUNT(c.post_id) DESC
LIMIT 10
)
ORDER BY CommentCount DESC
它也可能被解释为从phpbb和drupal
获得TOP 10SELECT name, COUNT(cid) CommentCount
FROM
(
SELECT u.name, c.cid
FROM dr_users u JOIN dr_comments c
ON u.uid = c.uid
UNION ALL
SELECT u.username, c.post_id
FROM phpbb_users u JOIN phpbb_posts c
ON u.user_id = c.poster_id
) q
GROUP BY name
ORDER BY CommentCount DESC
LIMIT 10
这是 SQLFiddle 演示