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

ユーザーがリストの任意の場所に挿入できるようにするにはどうすればよいですか?

    コードの観点から最も簡単な方法は、順序値ではなく、次の要素IDを持つリンクリストスタイルを使用することです。これは小さなリストではあまり役に立ちませんが、リストサイズを大きくし始めると、更新/移動/削除がはるかにクリーンになり、1つの順序を変更するために数千のタプルを更新する可能性がなくなります。

    ++正確なコード例は手元にありませんが、ユーザーのすべてのリストを呼び出すことになります

    SELECT Posts.id, Posts.next, Posts.content, User.firstPost FROM db.posts AS Posts 
    JOIN db.user as User ON Posts.ownerid = User.id 
    WHERE User.id='123' AND Posts.active = 1;
    

    これにより、1人のユーザーのすべての投稿が取得され、次の投稿のIDを含むフィールドが作成されます。開始するには、最初の投稿を識別するためのキーが必要になります(最初の投稿のIDをユーザーの情報に保存します)。最初の投稿をプルした後、その「次の」値を取得し、それを使用して次の投稿を識別します。

    これは短いリストでは少しおかしなことに思えますが、1000件の投稿があるユーザーについて考えてみてください。 2番目の位置に1つの投稿を追加する必要がある場合。従来の数値順序付けシステムでは、+1の更新で他の999行を更新する必要があります。このソリューションでは、2番目の位置に投稿を挿入する必要がある場合は、最初の投稿をクエリして次の値を取得するだけです。取得したら、新しい2番目の投稿の値に変更し、2番目の投稿の次の値を最初の投稿が最初に保持していた値に設定します。

    [1st Post] --Next---> [2nd Post] --Next---> [3rd Post]
    

    挿入後:

    [1st Post] -.                          .--> [2nd Post] --Next---> [3rd Post]
                `--Next--> [New 2nd Post]--`
    



    1. MYSQLタイムスタンプを月に変換

    2. ClusterControl1.8.2を使用したPostgreSQLv13のデプロイとスケーリング

    3. PostgreSQLのINとANY演算子

    4. 複数の列にわたるMySQLCOUNT()