2017-12-22 31 views
1

私はテーブルからデータを取得しており、別のテーブルの列でそれらを注文しています。以下は私の質問です。チャットIDごとに1つの結果を返します

2人の間にチャットがあり、10回のメッセージを送信したとします。私は1つの結果が本当に必要なときに私は10の結果を得るでしょう。私はchatIDで参加したのでメッセージをループしていることに気づきましたが、私は日付を取得するためにそれを行います。

これを取得するには、より良い方法がありますか、または動作するように簡単に調整できますか?

答えて

1

MySQLを使用している場合は、これを試してみてください。

SELECT c.ChatID, c.User1, c.User2 
FROM Chatroom AS c 
    JOIN (
    SELECT mx.* 
    FROM Messages AS mx 
    WHERE mx.ChatID = c.ChatID 
    ORDER BY mx.MessageDate 
    LIMIT 1 
) AS m ON m.ChatID = c.ChatID 
WHERE c.User1 = ? 
    OR c.User2 = ? 
ORDER BY m.MessageDate; 

代わりにこれを試してみてください?

SELECT c.ChatID, c.User1, c.User2 
FROM Messages AS m 
    JOIN Chatroom AS c on c.ChatID = m.ChatID 
WHERE (c.User1 = ? OR c.User2 = ?) 
GROUP BY c.ChatID 
ORDER BY m.MessageDate 
+0

これは、オブジェクト以外のエラーでメンバー関数bind_param()の呼び出しを返します。なぜなら、SQLとimのバインディング( 'ii'、$ userID、$ userID)に構文エラーがないように思われるからです。 – Ryne

+0

@Ryne '' '$ sql =" SELECT c.ChatID 、 C ASチャットルームFROM c.User1、c.User2 は(mx.MessageDate LIMIT 1 BY MX mx.ChatID = c.ChatID 順序とSELECT MX *メッセージFROM )に参加MX ON M AS .ChatID = c.ChatID WHERE c.User1 =:ユーザーID OR c.User2 =:m.MessageDate BYユーザーID ORDER; 「; $ stmt = $ pdo-> prepare($ sql); $ stmt-> bindValue( ':userid'、$ userID); $ stmt-> execute(); '' ' これは機能しますか? –

+0

@Ryne申し訳ありませんが、PDOを使用していますか、またはどのようにデータベースに接続していますか? –

関連する問題