ASP:動網論壇程式碼分析

來源:互聯網
上載者:User

    在動網論壇中,使用者登入以後,論壇菜單下方會多出兩條連結,即:“我發布的主題”和“我參與的主題”。前者的查詢簡單一些,只需要查詢登入使用者發布的主題就行,可以寫成“Select 主題 貼子表 where 作者=登入使用者名稱”就行了,但後一條就麻煩一些了。這裡假使主題貼和回複貼都是在一個資料表中,每條記錄只用一個欄位區分開來是主題貼和回複貼,我就是這樣做的。

我們知道,通常情況下,發布回複的時候,是可以省略標題的,假使我們如前一條一樣搜尋的話,得出的搜尋結果中是沒有標題這一項的,這樣就無法顯示出來,所以必須顯示該回複對對應的貼子的主題。這個查詢又是怎麼來做的呢?
  

我們先來看一看動網的代碼:
  
 
 "select top 200 * from topic where topicid in (select top 200 rootid from "&NowUseBBS&" where postuserid="&userid&" order by announceid desc) order by topicid desc"
  
  
這個查詢中為什麼有小括弧呢?是什麼意思?且聽在下繼續分解。
  
 
 我們一般用到的查詢都是單層查詢,而上面這段查詢卻是兩層,它要求伺服器在處理最終查詢工作之前先產生一個結果,然後根據當前的查詢結查再進一步繼續下面的查詢工作,也就是說,先執行小括弧內的查詢(我們稱之為子查詢),然後伺服器才開始執行外面的查詢,返回正確的結果,這種查詢稱為巢狀查詢。上面的這個查詢,第一層查詢是查登入使用者在本版發布過的所有貼子(含回複),然後再查這些貼子的主題。
  
  
除了上面這個功用之外,巢狀查詢還有什麼好處呢?如果要求在搜尋的匹配條件中使用統計函數(這在分析統計資料中經常用到),可以使用巢狀查詢。比如說,現在要求查詢所有銷售量大於平均銷售量的書的代號,如果寫成下面的查詢方式:
  
  SELECT title_id,qty //title_id為書號,qty為銷售量
  From sales
  Where qty>avg(qty) //avg為平均數函數,avg(qty)即為平均銷售量
  
  伺服器將會提示錯誤,因為,在where子句中不許直接對本SELECT列表的資料使用統計函數。通過在where子句中使用巢狀查詢可以解決這個問題,文法如下:
  
  SELECT title_id,qty
  FROM sales
  WHERE qty>
      (SELECT avg(qty) FROM sales)



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.