2011-12-11 212 views
0

我目前正在爲我的學校項目建立我自己的論壇,這個查詢列出了所有的論壇類別,但即時通訊有問題檢查,如果有一個主題/線程沒有被用戶閱讀,然後標籤論壇類別爲未讀消息。子查詢中的未知列爲什麼?

它說,在子查詢「未知列在‘字段列表’forum_category.id'」 ......我已經檢查了子查詢的幾個例子,從我所看到的,我應該能夠訪問forum_category.id並在子查詢中使用它?我沒有看到什麼即時做錯了在這一點上...

幫助是非常感謝!

SELECT forum_category.id 
    , root.name AS root_name 
    , subcat.name AS subcat_name 
    , subcat.id AS subcat_id 
    , subcat.description AS subcat_description 
    , subcat.safe_url AS subcat_safe_url 
    , topics.topic_id 
    , topics.topic_safe_url 
    , topics.topic_title 
    , topics.last_post_time 
    , topics.topic_last_poster_name 
    , topics.topic_last_poster_id 
    , (
     SELECT 
      posts_read.last_read_time 
     FROM 
      forum_topics a 
     LEFT JOIN 
      forum_posts_read AS posts_read ON 
       posts_read.last_read_time > a.last_post_time 
       AND posts_read.last_read_time >04546 
       AND posts_read.topic_id = a.topic_id 
       AND posts_read.user_id = 1 
       AND a.forum_id = forum_category.id 
     LIMIT 1) AS last_read_time 
FROM forum_category AS root 
LEFT JOIN 
    forum_category AS subcat ON subcat.parent_id = root.id 
LEFT JOIN 
    forum_topics AS topics ON topics.forum_id = subcat.id 
LEFT JOIN 
    forum_topics AS t2 ON t2.forum_id = subcat.id AND t2.last_post_time > topics.last_post_time 
WHERE 
    root.parent_id = 0 AND t2.forum_id IS NULL 
ORDER BY 
    root_name, subcat_name 

我知道嘗試這樣做,但只檢查了每個類別的第一個主題/線程...

SELECT root.name AS root_name 
    , subcat.name AS subcat_name 
    , subcat.id AS subcat_id 
    , subcat.description AS subcat_description 
    , subcat.safe_url AS subcat_safe_url 
    , topics.topic_id 
    , topics.topic_safe_url 
    , topics.topic_title 
    , topics.last_post_time 
    , topics.topic_last_poster_name 
    , topics.topic_last_poster_id 
    , posts_read.last_read_time 
FROM forum_category AS root 
LEFT JOIN 
    forum_category AS subcat ON subcat.parent_id = root.id 
LEFT JOIN 
    forum_topics AS topics ON topics.forum_id = subcat.id 
LEFT JOIN 
    forum_topics AS t2 ON t2.forum_id = subcat.id AND t2.last_post_time > topics.last_post_time 
LEFT JOIN 
    forum_posts_read AS posts_read ON 
     posts_read.last_read_time > topics.last_post_time 
     AND posts_read.last_read_time > ? 
     AND posts_read.topic_id = topics.topic_id 
     AND posts_read.user_id = ? 
     AND topics.forum_id = subcat.id 
WHERE 
    root.parent_id = 0 AND t2.forum_id IS NULL 
ORDER BY 
    root_name, subcat_name 

誰有一個想法,那將是這個很難......我的意思是其相當簡單的事情,我想要做的事情:(

+1

這是因爲你的別名forum_category爲ROOT試試'和a.forum_id = Root.id' – xQbert

回答

0

tables。我相信你的問題是在你的表的別名。你已經告訴引擎不要使用forum_category,而是使用ROOT或subcat。所以SQL不知道關於forum_Category(在「FROM」中沒有看到該表格,外部選擇中也存在同樣的問題。將其更改爲根目錄。

SELECT root.id 
    , root.name AS root_name 
    , subcat.name AS subcat_name 
    , subcat.id AS subcat_id 
    , subcat.description AS subcat_description 
    , subcat.safe_url AS subcat_safe_url 
    , topics.topic_id 
    , topics.topic_safe_url 
    , topics.topic_title 
    , topics.last_post_time 
    , topics.topic_last_poster_name 
    , topics.topic_last_poster_id 
    , (
     SELECT 
      posts_read.last_read_time 
     FROM 
      forum_topics a 
     LEFT JOIN 
      forum_posts_read AS posts_read ON 
       posts_read.last_read_time > a.last_post_time 
       AND posts_read.last_read_time >04546 
       AND posts_read.topic_id = a.topic_id 
       AND posts_read.user_id = 1 
       AND a.forum_id = Root.id 
     LIMIT 1) AS last_read_time 
FROM forum_category AS root 
LEFT JOIN 
    forum_category AS subcat ON subcat.parent_id = root.id 
LEFT JOIN 
    forum_topics AS topics ON topics.forum_id = subcat.id 
LEFT JOIN 
    forum_topics AS t2 ON t2.forum_id = subcat.id AND t2.last_post_time > topics.last_post_time 
WHERE 
    root.parent_id = 0 AND t2.forum_id IS NULL 
ORDER BY 
    root_name, subcat_name 
+0

你好xQbert,我也這麼認爲,但它並沒有改變錯誤 未知列「Root.id」 '在條款' 我真的拉我的頭髮在這一個:)我感謝幫助! – John

+0

那麼我的另一個想法是添加一個左連接擺脫子查詢,並得到其他所有最後read_time分組的最小/最大值;但由於看不到數據/表格,我一直在努力。 – xQbert