2009-10-13 46 views
0

編輯:如何在本論壇中使用MySQL獲取每個類別的最新帖子?

讓我在我後更加具體:

CATID,CAT1,CAT2,CAT3,CAT4,pri_color,sec_color和cat_name都與每一個特定的類別。

sum_views字段應該對應於論壇中該特定類別的所有視圖的總和。 count_posts字段應該對應於該類別的論壇中的帖子數量。

userID,forum_id,title,別名,創建的和段落對應於每個類別中的最新帖子。換句話說,對於每個類別,我需要相應的類別信息,每個類別的聚合論壇統計信息,最後是每個類別中的最新帖子。


我已經給了一個小項目來爲我們現有的系統創建論壇類型視圖。在這種情況下,我需要在每個論壇類別中找到最新的帖子(和其他信息)。

我當前的查詢如下:

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 

,這讓我幾乎所有我想要的,除了實際的最新帖子正確的信息。我想我的主要罪魁是我對JOINS和GROUP BY的經驗不足。它似乎是以這樣一種方式對數據進行分組,使得它給我最新創建的時間戳,但卻是最早的論壇帖子。

請注意,目前,我不能在當前軟件中更改表結構或創建緩存表,儘管我們將在不久的將來構建替代品。此外,USERS表中的id字段是另一個表的外鍵。


論壇

id  int(10) unsigned NO PRI NULL auto_increment 
userID  int(10) unsigned NO MUL 0 
catID  int(3) unsigned NO MUL 0 
regID  int(3) unsigned NO MUL 0 
approved enum('yes','no') NO MUL yes 
title  varchar(150) NO MUL paragraph text NO NULL 
view  int(10) unsigned NO 1 
created  int(10) unsigned NO 0 
modified int(10) unsigned NO MUL 0 
ip  varchar(15) NO 
oldID  int(10) unsigned NO 0 
comments int(4) NO MUL 0 
responses int(4) NO 0 
pics  int(4) NO MUL 0 

USERS

user_id  int(10) unsigned NO PRI NULL auto_increment 
id  int(10) unsigned NO MUL 0  
alias  varchar(50) NO MUL new  
email  varchar(150) NO MUL  
fname  varchar(30) NO MUL  
lname  varchar(30) NO MUL  
address  varchar(200) NO   
city  varchar(50) NO   
state  varchar(50) NO   
zip   varchar(20) NO   
country  varchar(50) NO   
job   varchar(150) NO   
phone  varchar(30) NO   
url   varchar(200) NO   
pref_news enum('yes','no') NO no  
pref_contact enum('yes','no') NO yes  
pref_summary int(3) NO 20  
pref_showLoc enum('yes','no') NO no  
pref_showName enum('yes','no') NO no  
pref_showEmail enum('yes','no') NO no  
pref_showUrl enum('yes','no') NO no  

類別

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 

回答

0

你的查詢(重新格式化爲清晰起見):

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); 
+0

不幸的是,這並沒有回答我的問題。我的錯是因爲沒有足夠清楚地表述。 – GregoryD 2009-10-13 18:44:06

0

曾與帳戶創建一個問題,它不會讓我編輯我的職位,但...

此查詢:

選擇區別category.id,category.cat1,category.cat2,category.cat3,category.cat4,category.pri_color,category.sec_color,SUM(forum.view)AS sum_views,COUNT(forum 。id)AS count_posts FROM category,forum WHERE forum.catID = category.id AND category.area ='forum'AND forum.approved ='yes'GROUP BY category.id

有效地處理所有的查詢處理與類別表信息。現在我只需要知道如何將它鏈接到每個類別的最新帖子。

相關問題