我有一張表,用於保存有關用戶之間發送的消息的信息。它看起來是這樣的:查詢查詢或分組循環
MessageID | MessageIDReference | MessageSubject | Body | Date
1 NULL Test Hello 10/01/2014
2 1 RE: Test Goodbye 11/01/2014
3 1 RE: Test Hello 11/01/2014
.......
50 45 RE: Subject Blah 12/12/2014
所以創建將在MessageIDReference
列NULL
值(因爲它是一個新的消息不是回覆)的第一條消息。當用戶回覆郵件時,它會將原始郵件的MessageID
插入到MessageIDReference
列中,以便我們知道它回覆了哪個郵件。好而簡單!
在我的網頁我想在一個區域內顯示該對話中的第一條消息,然後任何後續答覆該消息所以它很容易看到談話的流動,像這樣的:
<ol>
<cfloop query="messages">
<li>
#MessageSubject# #Body#
<ol>
<!--- I want replies to this message here somehow --->
<li>1st reply</li>
<li>2nd reply</li>
etc etc
</ol>
</li>
</cfloop>
<ol>
我認爲它可以通過在每個<cfloop>
標籤內的某種組來完成,但我不知道如何。我現在認爲它必須在內部循環中使用查詢查詢來完成,以便它返回每個MessageID
的所有答覆並輸出這些答案。
查詢的查詢工作,當我做這樣的事情:
<cfquery name="Messages">
SELECT * FROM Messages
</cfquery>
<ol>
<cfquery type="query" name="MessagesNew">
SELECT *
FROM Messages
WHERE MessageIDReference IS NULL
</cfquery>
<cfloop query="MessagesNew">
<li> #MessagesNew.MessageSubject# #MessagesNew.Body#
<cfquery type="query" name="MessagesReplies">
SELECT *
FROM Messages
WHERE MessageIDReference = #MessagesNew.MessageID#
</cfquery>
<ol>
<cfloop query="MessagesReplies">
<li>#MessagesReplies.MessageSubject# #MessagesReplies.Body#</li>
</cfloop>
</ol>
</li>
</cfloop>
</ol>
您最好不要使新消息的MessageIDReference無效。相反,使其與MessageID相同。這當然會使這個任務更容易。順便說一下,只有只有一條消息沒有引用時,您的查詢樣本查詢纔會有效。 –
@DanBracuk我編輯了我的文章,所以它更清晰一點。我之前在衝,並沒有完成我的例子 –
爲什麼你會急於提問? –