1

これは私の初めてのSOの質問です:)

一時ユーザーを既存のユーザーに「マージ」しようとしています。関連するすべてのオブジェクト関係 - 1 つは「post_relationships」です。

問題は..両方のユーザーが同じ投稿に関係がある場合、単純な INSERT INTO ... SELECT ステートメントで DUPLICATE KEY エラーが発生する..

また、ユーザーの1人がより高いpermission_levelを持っている場合、2人のユーザーの最高のpermission_levelを維持したいと思います。

機能するクエリを作成しましたが、これを達成するためのより良い方法があるかどうか疑問に思っています。テーブルが大きくなるにつれて、このクエリはそれほど効率的ではなくなるのではないかと心配しています。

INSERT INTO post_relationships
            (id_user, id_post, access, label, time_created)
        SELECT 
            old.id_user,
            new.id_post, 
            new.access, 
            new.label, 
            new.time_created 
        FROM 
            post_relationships AS old,
            post_relationships AS new
        WHERE 
            old.id_user = '$id_old' AND 
            new.id_user = '$id_new' AND
            new.id_post = old.id_post AND 
            new.access > old.access
        ON DUPLICATE KEY UPDATE
            access= new.access,
            label = new.label

条件が満たされた場合、常に UPDATE を強制します。

new.access > old.access

そして、ここにやり過ぎのコードがあるのではないかと心配しています。助言がありますか?

ありがとう!

4

0 に答える 0