【发布时间】:2011-12-16 19:26:38
【问题描述】:
我需要一种方法让页面管理员查看他们页面的成员,这些成员按用户在该特定页面上的帖子总数排序。帖子存储在不同的表格中,例如投票、下载、wiki 等(如 15 个表格)。每个都有 id、user_id、page_id、title、content 等结构。列出页面所有用户的表称为“收藏夹”。它的结构就是 id, user_id, page_id, date。
我目前有一个查询,它将所有“内容表”联合在一起,以便特定用户在网站上显示他们关于它所在页面的所有帖子,我可以很容易地使用 WHERE 使其特定于每个页面page_id = $page_id)。我尝试使用该代码来执行我在版主区域中尝试执行的操作。正如我所提到的,在版主区域中,我需要按用户的总帖子数 DESC 对用户列表进行排序。
我有这个代码,但它不工作。
$getfans = mysql_query("SELECT DISTINCT user_id, ((SELECT id FROM wiki WHERE wiki.page_id = $page_id AND wiki.user_id = favorites.user_id)
UNION ALL
(SELECT id FROM downloads WHERE downloads.page_id = $page_id AND downloads.user_id = favorites.user_id)
UNION ALL
(SELECT id FROM polls WHERE polls.page_id = $page_id AND polls.user_id = favorites.user_id)) AS posts
FROM favorites WHERE favorites.page_id = $page_id AND favorites.status = 0 ORDER BY posts DESC", $conn);
我尝试了其他同样无效的方法,但这个方法对我来说最合乎逻辑,所以我将只展示它
请帮忙。谢谢。
另外...
这也许是朝着正确方向迈出的一步
$getfans = mysql_query("SELECT DISTINCT user_id, (SELECT COUNT(id) FROM polls WHERE page_id = $page_id AND user_id = favorites.user_id) AS 来自收藏夹的帖子 WHERE favorites.page_id = $page_id AND favorites.status = 0 ORDER BY posts DESC", $conn);
当我回显 $posts 时,它为我提供了该页面用户投票的正确计数。
但是,当我尝试处理多个表时,它只返回了一个用户。
例子:
$getfans = mysql_query("SELECT DISTINCT user_id, SUM((SELECT COUNT(id) FROM polls WHERE page_id = $page_id AND user_id = favorites.user_id)+(SELECT COUNT(id) FROM wiki WHERE page_id = $page_id AND user_id = favorites.user_id)) 来自收藏夹的帖子 WHERE favorites.page_id = $page_id AND favorites.status = 0 ORDER BY 发布 DESC", $conn);
我找到了解决方案
如果好奇,请阅读我下面的帖子。
【问题讨论】:
-
你是在总结每个用户每个表中有多少行吗?
-
是的。而且我已经完成了各种方法,包括 COUNT(*) 和 * 但仍然没有奏效。当我只是想显示一个用户的所有帖子时,整个联合块本身就可以工作,但当我试图显示所有用户然后按帖子排序时却不行。
标签: mysql count union multiple-tables