我有一张表,用于保存有关用户之间发送的消息的信息。它看起来是这样的:查询查询或分组循环
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我编辑了我的文章,所以它更清晰一点。我之前在冲,并没有完成我的例子 –
为什么你会急于提问? –