sql >> データベース >  >> RDS >> Mysql

MySQL SelectJOIN3テーブル

    2つの結合が必要です。次のようなもので始める必要があります(ただし、pm_dataの関係を100%理解しているわけではありません) およびpm_info ):

    SELECT pm_info.is_read, sender.usrFirst + ' ' + sender.usrLast as sender_name, 
        pm_data.date_sent, pm_data.title, pm_data.thread_id
    FROM pm_info
    INNER JOIN pm_data ON pm_info.thread_id = pm_data.thread_id
    INNER JOIN tblUsers AS sender ON pm_data.sender_id = tblUsers.usrID
    WHERE pm_info.receiver_id = @USER_ID /*in this case, 2*/
    ORDER BY pm_data.date_sent DESC
    

    pm_data間の関係を想定しています およびpm_info スレッドIDです。そうでない場合は、上記を必要に応じて調整できるはずです。ここに送信された日付でも並べ替えましたが、スレッドをまとめることができません 。質問の言い回しから、それらをまとめたいかどうかはわかりません。

    スレッドをまとめたい場合 、より複雑なクエリが必要になります:

    SELECT pm_info.is_read, sender.usrFirst + ' ' + sender.usrLast as sender_name, 
        pm_data.date_sent, pm_data.title, pm_data.thread_id
    FROM pm_info
    INNER JOIN pm_data ON pm_info.thread_id = pm_data.thread_id
    INNER JOIN tblUsers AS sender ON pm_data.sender_id = tblUsers.usrID
    INNER JOIN (SELECT thread_id, MAX(date_sent) AS max_date
                FROM pm_data
                GROUP BY thread_id) AS most_recent_date 
               ON pm_data.thread_id = most_recent_date.thread_id
    WHERE pm_info.receiver_id = @USER_ID /*in this case, 2*/
    ORDER BY most_recent_date.max_date DESC, pm_data.thread_id, 
        pm_data.date_sent DESC
    

    このクエリは、副選択を使用して各スレッドの最新の変更日を検索し、次にこれで並べ替えます。



    1. SQL Serverは、MySQLのON DUPLICATEKEYUPDATEのようなものを提供しますか

    2. 階層的に定義されたデータセットのフラット化されたテーブル/ビューの作成

    3. EXISTSとJOINおよびEXISTS句の使用

    4. PHPを使用して各登録ユーザーに独自のURLを与えるにはどうすればよいですか?