0

我需要获得来自 Drupal + phpBB 的大多数评论 + 帖子的用户列表。

我正在使用 mySQL。

Drupal 数据库结构:dr_comments(cid,uid) dr_users(uid,name)

phpBB: phpbb_posts(post_id,poster_id) phpbb_users(user_id,username)

我有大多数来自 Drupal 和 phpBB 的评论的用户的 SQL 代码不在一起。

德鲁巴:

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

我不知道如何将它合并在一起。

4

2 回答 2

0

您可以使用联合:

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

于 2013-07-20T18:15:31.920 回答
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 10

SELECT 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演示

于 2013-07-20T18:55:24.033 回答