2011-09-02 141 views
1

我已經表叫comments具有以下結構:集團的意見由同一個條目,按日期

id | entry_id | date | comment 

我也有一個表叫entries具有以下結構:

entry_id | title | date | entry 

我只是想顯示最近的評論和條目,添加了這些評論。

現在,我使用這個查詢:

SELECT c.id, 
     c.date, 
     c.comment, 
     e.entry_id, 
     e.title 
FROM entries e 
     INNER JOIN comments c 
     ON e.entry_id = c.entry_id 
GROUP BY c.date DESC 
LIMIT 50 

我輸出的結果,因此:

​​

評論按日期排序。我試圖做的是相同entry_id簡稱組的意見,例如:

#entry_id 
    1 hour ago: 
    Some comment 

    2 hours ago: 
    Some comment without repeating the `entry_id` 

#other entry_id 
    5 hours ago: 
    Some comment 

我將如何做呢?不需要爲我編寫代碼,只要說這樣做(例如在僞代碼中)。這是評論羣組像Facebook或谷歌+流,我希望你明白我的意思。

回答

1

使用這樣的:Grouping arrays in PHP

我想我不應該寫了這麼多的細節對我的MySQL表結構,PHP和數組做到了。感謝所有人的關注。

$groups = array(); 

foreach($items as $item) 
    $groups[$item['value']][] = $item; 
0

第一組由entry_ID組成,然後按最大日期分組。你最關心的是最近的一個。 (這就是Facebook如何至少做到的。)

這裏是TSQL

代碼在內部查詢我選擇entry_id和最新評論的日期。

然後我按照最新評論或最新條目排序(取決於最近發生的事情),然後通過entry_id排序它們(因此所有條目評論將首先並且最後在日期之後)一個條目中的註釋會以正確的順序

注:我沒有測試此代碼,以便它可能有一些錯別字

SELECT * FROM 
    (SELECT e.entry_id, MAX(c.date) as latest 
    FROM entries e 
    INNER JOIN comments c ON e.entry_id = c.entry_id 
    GROUP BY e.entry_id DESC, max(c.date) 
) AS LIST 
LEFT JOIN entries e ON e.entry_id = LIST.entry_ID 
LEFT JOIN comments c on c.entry_ID = LIST.entry_ID 
ORDER BY MAX(e.date,list.latest) as time_of_entry_or_comment DESC, 
            e.entry_ID, 
            c.date DESC 
+0

問題是我的表結構,如果我按entry_id分組,那麼我只能輸出每個條目的最後一個單獨註釋。 – Buddy

+0

您只需使用該查詢來查看entry_ids的順序,然後將該結果鏈接回註釋列表,以便按照所需順序獲取所有註釋....您想要一些代碼嗎? – Hogan

+0

是的,請給我一些代碼。我想我沒有正確理解你。 – Buddy

0

我會想象你做一個查詢,如這一個

select 
    e.entry, e.title, c.comment, c.date 
from 
    comments c join entries e on c.entry_id = e.entry_id 
order by 
    e.entry_id, c.date desc 

以及您的結果集上的循環,而entry_id仍然相同。雖然我不確定根據您的問題在哪裏輸出。在代碼或sql編輯器中。