在 MySQL 数据库中,可以使用拉链表实现新客户/老客户判断。拉链表是一种以时间为序的维表,每一行对应了一个客户的一次挂号。下面是一份示例代码:
CREATE TABLE customers_history (
customer_id INT NOT NULL AUTO_INCREMENT,
registration_date DATE NOT NULL,
name VARCHAR(50) NOT NULL,
phone VARCHAR(20) NOT NULL,
pet_name VARCHAR(50) NOT NULL,
PRIMARY KEY (customer_id)
);
CREATE TABLE customers_status (
customer_id INT NOT NULL,
status ENUM('new', 'old') NOT NULL,
PRIMARY KEY (customer_id)
);
DELIMITER //
CREATE PROCEDURE update_customer_status()
BEGIN
DECLARE cur_date DATE DEFAULT CURDATE();
INSERT INTO customers_status (customer_id, status)
SELECT customer_id,
IFNULL((SELECT 'old' FROM customers_history h WHERE h.customer_id = c.customer_id AND h.registration_date < cur_date), 'new') AS status
FROM customers_history c
ON DUPLICATE KEY UPDATE status = VALUES(status);
END//
DELIMITER ;
这份代码创建了两张表:customers_history 和 customers_status。前者存储了客户的每次挂号信息,后者存储了客户的状态(新客户/老客户)。
这份代码还创建了一个存储过程 update_customer_status,它每天会更新所有客户的状态。在执行这个存储过程时,会对所有客户进行遍历,并在 customers_status 表中更新对应的状态。
如果当天有客户挂号,则在挂号时将新的挂号信息插入 customers_history 表。然后,通过执行存储过程