2013-04-28 70 views
0

我的目標是爲我的sitemap.xml文件編寫我批准文章的最後修改日期(lastmod)。這個數據有兩種可能性。MySQL在文章日期和評論日期中選擇最新批准日期

  1. 如果文章沒有評論被批准,那麼的lastmod是文章的批准 日期。
  2. 如果文章至少有1個批准的評論,那麼lastmod是相關文章的最後批准評論的批准日期 。

php unsuccessful while loop within prepared statements問題和閱讀的答案後,我決定

  1. 不中準備使用循環對於這種情況
  2. 添加col_article_id列到我的意見表,該表顯示了 相關文章在文章ID表
  3. 並嘗試用更智能的mySQL查詢解決我的問題

我有2個表:

  1. 文章
  2. 評論(comments.col_article_id鏈接到相關 文章評論)

我想下面的查詢後,

select tb_articles.col_approvaldate, tb_comments.col_approvaldate 
from tb_articles, tb_comments 
where tb_articles.col_status ='approved' AND tb_comments.col_status ='approved' AND tb_articles.col_id=tb_comments.col_article_id 

我的問題是:

1 - 我需要好歹,如果它是在MySQL的語法允許該select max(tb_articles.col_approvaldate, tb_comments.col_approvaldate)

2 - 如果我有N個認可無任何批准的評論文章和M評論被批准(一個或多個)覈準的條款,那麼我應該有N + M結果行每行有1列。但目前,我有m行,每行有2列。

所以我意識到我是錯誤的方式。

我還搜了「mysql最新一行每組」關鍵字。但是,我可以到達這一點。

這是我的第一個join的經驗。你能糾正我嗎?最好的問候

回答

0

我是否正確理解tb_comments記錄是否默認創建了一篇文章?這不應該是這樣的 - 如果沒有評論,那裏就不應該有記錄。如果有,您輸入的默認日期是什麼?空值?另外tb_comments.col_status對我來說似乎是多餘的 - 如果你有tb_comments.col_approvaldate那麼它在當天被批准,你根本不需要身份。

這個查詢可能是你會爲你工作(評論AND如果我正確地理解你的表結構不應該改變的東西):

SELECT 
    a.col_id AS 'article_id', 
    IFNULL(MAX(c.col_approvaldate), a.col_approvaldate) 
FROM 
    tb_articles a 
    LEFT JOIN tb_comments c ON a.col_id = c.col_article_id #AND c.col_status ='approved' 
WHERE 
    a.col_status ='approved' 
GROUP BY a.col_id 
+0

首先,我在phpadmin sql窗口中嘗試了查詢。不幸的是,它給了我「#1054 - 'where子句''消息中的未知列'tb_articles.col_status'。我在相關表格中肯定有這個專欄。其次,我的邏輯是:作者保存到tb_articles中。那時狀態='待定'。然後如果編輯批准,地位就會變成「批准」。這意味着文章已經發布。人們然後寫評論。同樣的邏輯也適用於此。第一次保存表示自動掛起。然後,如果編輯批准評論狀態也會變成「批准」併發布。如果狀態未決,則批准日期爲空。 – 2013-04-29 09:08:43

+0

編輯查詢 - 現在查看。 – sashkello 2013-04-29 10:03:19

+0

感謝您的幫助,最誠摯的問候。 – 2013-04-30 05:58:37

1

試試這個:

select 
    tb_articles.id, 
    ifnull(
     max(tb_comments.col_approvaldate), 
     tb_articles.col_approvaldate 
    ) as last_approved 
from tb_articles 
left join tb_comments 
    on tb_articles.col_id=tb_comments.col_article_id 
    and tb_comments.col_status ='approved' 
where tb_articles.col_status ='approved' 
group by 1; 
+0

我試過phpadmin sql窗口中的查詢。不幸的是,它只給了我1條記錄。該列的標題是last_approved,唯一的記錄是我網站中最新評論的批准日期。 – 2013-04-29 08:40:38

+0

查看編輯答案。您可以從tb_articles添加更多列 - 如果您願意,也可以將它們添加到組中(例如按照我的名字或姓名編號) – Bohemian 2013-04-29 10:32:39

+0

已編輯的答案結果是:如果批准的文章已批准評論,則日期可以正常工作);然而,沒有任何評論的已批准文章的日期帶有NULL值。感謝您的幫助,祝好! – 2013-04-30 05:57:39