如何使用MySQL获取论坛中每个类别的最新帖子?
编辑: 让我更具体地说明我的目标: catID、cat1、cat2、cat3、cat4、pri_颜色、sec_颜色和cat_名称都与每个特定类别相关 sum_views字段应与论坛中该特定类别的所有视图的总和相对应。 count_posts字段应与该类别论坛中的帖子数量相对应 用户id、论坛id、标题、别名、创建的内容和段落对应于每个类别中的最新帖子 换句话说,对于每个类别,我需要相应的类别信息,每个类别的聚合论坛统计数据,最后是每个类别中的最新帖子如何使用MySQL获取论坛中每个类别的最新帖子?,mysql,Mysql,编辑: 让我更具体地说明我的目标: catID、cat1、cat2、cat3、cat4、pri_颜色、sec_颜色和cat_名称都与每个特定类别相关 sum_views字段应与论坛中该特定类别的所有视图的总和相对应。 count_posts字段应与该类别论坛中的帖子数量相对应 用户id、论坛id、标题、别名、创建的内容和段落对应于每个类别中的最新帖子 换句话说,对于每个类别,我需要相应的类别信息,每个类别的聚合论坛统计数据,最后是每个类别中的最新帖子 我得到一个小项目,为我们现有的系统创建一个
我得到一个小项目,为我们现有的系统创建一个论坛类型的视图。在这种情况下,我需要在每个论坛类别中找到最新的帖子(和其他信息) 我目前的查询如下:
SELECT DISTINCT forum.catID AS catID, category.cat1 AS cat1,
category.cat2 AS cat2,
category.cat3 AS cat3,
category.cat4 AS cat4,
SUM(forum.view) AS sum_views,
COUNT(forum.id) AS count_posts,
category.pri_color AS pri_color,
category.sec_color AS sec_color,
category.name AS cat_name,
forum.userID AS userID,
forum.id AS forum_id,
forum.title AS title,
users.alias AS alias,
MAX(forum.created) AS created,
forum.paragraph AS paragraph
FROM forum, category, users
WHERE forum.approved = 'yes'
AND users.id = forum.userID
AND forum.catID = category.id
GROUP BY forum.catID
ORDER BY category.name
它给了我几乎所有我想要的正确信息,除了最新的帖子。我想我的罪魁祸首是我缺乏加入和分组的经验。它似乎以这样一种方式对数据进行分组,它给了我最新创建的时间戳,但却是最古老的论坛帖子
请注意,目前我无法在当前软件中更改表结构或创建缓存表,尽管我们将在不久的将来构建一个替换表。此外,USERS表中的id字段是另一个表的外键
论坛 使用者 类别
id int(10) unsigned NO PRI NULL auto_increment
area enum('article','classifieds','news','forum') NO forum
level enum('1','2','3','4') NO 1
cat1 int(10) NO 0
cat2 int(10) unsigned NO 0
cat3 int(10) unsigned NO 0
cat4 int(10) unsigned NO 0
name varchar(150) NO
pri_color varchar(6) NO
sec_color varchar(6) NO
right_nav text NO NULL
left_ad text NO NULL
footer_ad text NO NULL
top_ad text NO NULL
您的查询(为清晰起见,已重新格式化):
查询的问题是聚合数据不能与未聚合数据逻辑关联。例如,特定类别的聚合计数不适用于任何特定用户。因此,您要么希望单独获取聚合数据,要么希望按用户信息分组:
SELECT c.name,c.pri_color, c.sec_color,
cats.ualias,
cats.sum_views, cats.count_posts, cats.created
c.cat1, c.cat2, c.cat3, c.cat4,
FROM categories c JOIN
(SELECT f.catID, u.alias AS ualias
SUM(f.view) as sum_views,
COUNT(f.id) as count_posts,
MAX(f.created) as created
FROM forum f JOIN users u ON (f.userID=u.id)
WHERE f.approved='yes'
GROUP BY f.catID, u.alias) AS cats
ON (c.id=cats.catID);
帐户创建有问题,不允许我编辑我的帖子,但是 此查询: 选择不同的category.id、category.cat1、category.cat2、category.cat3、category.cat4、category.pri_color、category.sec_color、SUM(forum.view)作为SUM_视图,COUNT(forum.id)作为category中的COUNT_帖子,其中forum.catID=category.id和category.area='forum'和forum.approved='yes'按类别分组。id
有效地处理所有处理类别表信息的查询。现在我只需要知道如何将它链接到每个类别的最新帖子。不幸的是,这并不能回答我的问题。我的错是措辞不够清楚。
id int(10) unsigned NO PRI NULL auto_increment
area enum('article','classifieds','news','forum') NO forum
level enum('1','2','3','4') NO 1
cat1 int(10) NO 0
cat2 int(10) unsigned NO 0
cat3 int(10) unsigned NO 0
cat4 int(10) unsigned NO 0
name varchar(150) NO
pri_color varchar(6) NO
sec_color varchar(6) NO
right_nav text NO NULL
left_ad text NO NULL
footer_ad text NO NULL
top_ad text NO NULL
SELECT DISTINCT f.catID AS catID,
c.cat1, c.cat2, c.cat3, c.cat4,
SUM(f.view) AS sum_views,
COUNT(f.id) AS count_posts,
c.pri_color, c.sec_color, c.name AS cat_name,
f.userID AS userID,
f.id AS forum_id, f.title, u.alias,
MAX(f.created) AS created,
f.paragraph
FROM forum f JOIN users u ON (u.id = f.userID)
JOIN category c ON (f.catID = c.id)
WHERE f.approved = 'yes'
GROUP BY f.catID ORDER BY c.name
SELECT c.name,c.pri_color, c.sec_color,
cats.ualias,
cats.sum_views, cats.count_posts, cats.created
c.cat1, c.cat2, c.cat3, c.cat4,
FROM categories c JOIN
(SELECT f.catID, u.alias AS ualias
SUM(f.view) as sum_views,
COUNT(f.id) as count_posts,
MAX(f.created) as created
FROM forum f JOIN users u ON (f.userID=u.id)
WHERE f.approved='yes'
GROUP BY f.catID, u.alias) AS cats
ON (c.id=cats.catID);