ユーザーの現在のパスワードが、最後に使用した5つのパスワードと一致しないようにする必要があります。期限切れのパスワードは、次のようなテーブルに保存されます。
################################################################
# table_A #
################################################################
# id # label # attr_string # attr_datetime # u_id #
################################################################
# 1 # expired_pass # some_hash # YYYY-MM-DD HH:MM:SS # 1 #
# 2 # expired_pass # some_hash # YYYY-MM-DD HH:MM:SS # 1 #
# 3 # expired_pass # some_hash # YYYY-MM-DD HH:MM:SS # 1 #
# 4 # expired_pass # some_hash # YYYY-MM-DD HH:MM:SS # 1 #
# 5 # expired_pass # some_hash # YYYY-MM-DD HH:MM:SS # 1 #
################################################################
ここで、入力時に5つ以上の期限切れのパスワードがすでに保存されているかどうかを確認し、保存されている場合は最も古いパスワードを削除するトリガーが必要です。これは私がこれまでに思いついたものです。
DELIMITER //
CREATE TRIGGER removePass AFTER INSERT ON `user_attributes`(
SET @user_id := SELECT u_id FROM `user_attributes` WHERE id = LAST_INSERT_ID()//
SET @num := SELECT COUNT(id) FROM `user_attributes` WHERE u_id = @user_id AND label = 'expired_password'//
IF @num >= 5 THEN
DELETE FROM `user_attributes`
WHERE id IN(
SELECT id
FROM `user_attributes`
WHERE u_id = @user_id
AND label = 'expired_pass'
ORDER BY attr_datetime DESC
LIMIT 1
)
END IF
)//
DELIMITER ;