ColdFusionで新しいチャットシステムを作っているのですが、ちょっとした問題の整理に手こずっています。
まず、システムの仕組みについて説明します。誰かと新しいチャットを作成すると、MySQL テーブルに会話行が作成されますconversations
。その後、ユーザーは互いにメッセージを送信できます。conversations_messages
メッセージを送信すると、タイムスタンプ、メッセージを送信したユーザー、メッセージ、そしてもちろんメッセージの ID を含む行がテーブルに挿入されます。論理的に聞こえますが、ここで大きな問題が発生します。これらすべてのメッセージを整理することです。
ユーザーはページで他のユーザーとメッセージを表示できます。これはそのページのコードです。
// Check conversation ID based on page url
<cfif IsDefined('URL.chat') and URL.chat neq "">
// Load conversation based on page url
<cfquery name = "getconv" datasource = "#DSN#">
SELECT *
FROM `conversations`
</cfquery>
// Get all messages from this conversation
<cfoutput query="getconv">
<cfquery name = "getmessages" datasource = "#DSN#">
SELECT *
FROM `conversations_messages`
WHERE `conversation` = '#chat#'
ORDER BY `conversations_messages`.`id` DESC
</cfquery>
// Get messages sent by 'user_one'
<cfquery name = "my" datasource = "#DSN#">
SELECT *
FROM `conversations_messages`
WHERE `conversation` LIKE '#chat#'
AND `user` LIKE '#user.id#'
ORDER BY `conversations_messages`.`id` DESC
</cfquery>
// Get messages sent by 'user_two'
<cfquery name = "friend" datasource = "#DSN#">
SELECT *
FROM `conversations_messages`
WHERE `conversation` LIKE '#chat#'
AND `user` LIKE '#getconv.user_two#'
</cfquery>
<div class="content">
// Messages sent by 'user_one' aka. user that created conversation
You: <cfoutput><cfloop query="my">#my.message#<br></cfloop></cfoutput>
// Messages sent by 'user_two'
Friend: <cfoutput><cfloop query="friend">#friend.message#</cfloop></cfoutput>
</cfoutput>
</div>
</cfif>
これが現在の結果の表示方法です: (ご覧のとおり、ユーザー別にソートされています)
メッセージIDでソートしたいので、次のように表示されます。
これで少しわかりやすくなったと思います!助けていただければ幸いです!