用户评论最多来自Drupal + phpBB

时间:2013-07-20 18:05:19

标签: mysql sql drupal phpbb

我需要从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

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

2 个答案:

答案 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 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 演示