0

ColdFusion で、さまざまな MySQL テーブルを使用するチャット スクリプトを作成しました。1 つは会話が保存される場所で、もう 1 つは会話を開始したユーザーと受信したユーザーを定義する場所です。

これで、誰かと一緒にチャットできるスクリプトを作成しました。メッセージを送信すると、タイムスタンプ、メッセージ ID、メッセージを送信したユーザー ID、およびメッセージ自体を含む行が MySQL テーブルに追加されます。会話全体が次のコードで表示されます。

// Get all conversations started by the user that is signed in 
<cfquery name = "Friendship" datasource = "#DSN#">
    SELECT *
    FROM  `conversations`
    WHERE  `user_one` LIKE  '#user.id#'
    ORDER BY  `conversations`.`lastmessage` DESC
</cfquery>

// Get all conversations started by others but receiver is the user that is signed  in                                                                                  
<cfquery name = "FriendshipBack" datasource = "#DSN#">
    SELECT *
    FROM  `conversations`
    WHERE  `user_two` LIKE  <cfqueryparam value="#user.id#" cfsqltype="cf_sql_integer">
    ORDER BY  `conversations`.`lastmessage` DESC
</cfquery>


// OUTPUT - conversations that I began
<cfoutput query="Friendship">
    // This code translates a user id into a name
    <cfquery name = "FriendshipToUsername" datasource = "#DSN#">
        SELECT *
        FROM users
        WHERE id = '#user_two#'
    </cfquery>

    <cfif IsDefined("FriendshipToUsername.username")>
        <cfif IsDefined('URL.chat') and URL.chat neq "">
        </cfif>                

       // Display username 
      <h3>#FriendshipToUsername.username#</h3>
    </cfif>

</cfoutput>

/// OUTPUT - conversations that I received
<cfoutput query="FriendshipBack">
    // This query translates a user id into a name
    <cfquery name = "FriendshipToUsernameBack" datasource = "#DSN#">
        SELECT *
        FROM users
        WHERE id = <cfqueryparam value="#user_one#" cfsqltype="cf_sql_integer">
    </cfquery>

    <cfif IsDefined('URL.chat') and URL.chat neq "">
    </cfif>                
    // Display username 

    <h3>#FriendshipToUsernameBack.username</h3>
</cfoutput>

現時点では、チャット リストは 2 つのカテゴリに分かれています。1 つは、サインインしているユーザーが会話を開始したリストであり、もう 1 つは、サインインしているユーザーが他の誰かから会話を受信した場所です。問題は、そのように表示したくないので、両方のリストを混ぜ合わせて、タイムスタンプに基づいてすべてをリストしたい (最新のものから古いものへ)

現時点では、チャット リストは 2 つのカテゴリに分かれています。1 つは、サインインしているユーザーが会話を開始したリストであり、もう 1 つは、サインインしているユーザーが他の誰かから会話を受信した場所です。問題は、そのように表示したくないので、両方のリストを混ぜ合わせて、タイムスタンプに基づいてすべてをリストしたい (最新のものから古いものへ)

これを達成する方法はありますか?

自分のコードが悪用可能であることはわかっていますが、これはまだ WIP です

4

2 に答える 2

1

2 つの個別のクエリではなく、1 つのユニオン オール クエリを実行すると、それが可能になります。

于 2013-04-13T19:00:26.360 に答える