لتحقيق هذا الهدف في MySQL، يمكنك استخدام متغير عدد الظهور لتتبع عدد مرات ظهور القيم في العمود. يمكنك استخدام تعليمة UPDATE
مع شرط ORDER BY
لتحديث القيم في العمود وتغييرها إلى القيم التالية عندما يصل عدد الظهور إلى الحد الأقصى. يمكنك استخدام التالي كمثال لهذا المفهوم:
sqlCREATE TABLE example (
id INT AUTO_INCREMENT PRIMARY KEY,
value INT,
count INT DEFAULT 0
);
DELIMITER $$
CREATE TRIGGER update_value_trigger
BEFORE INSERT ON example
FOR EACH ROW
BEGIN
DECLARE max_count INT;
SET max_count = 3; -- العدد الأقصى للظهور
IF NEW.count >= max_count THEN
SET NEW.count = 0;
SET NEW.value = (SELECT MAX(value) + 1 FROM example);
ELSE
SET NEW.count = NEW.count + 1;
END IF;
END$$
DELIMITER ;
INSERT INTO example (value) VALUES (1), (1), (1), (1), (1), (2), (2), (2), (2), (2);
SELECT * FROM example;
هذا المثال يستخدم جدولًا بعنوان example
مع حقلين: value
لتخزين القيم و count
لتتبع عدد مرات ظهور القيم. يستخدم المثال تريجر لتحديث القيم في الجدول عند إدخال قيمة جديدة، حيث يتم زيادة count
بمقدار واحد، وعندما يصل count
إلى الحد الأقصى، يتم تحديث value
ليكون أكبر قيمة موجودة + 1 ويتم إعادة تعيين count
إلى الصفر.
المزيد من المعلومات
لتحديث القيم في الجدول بحيث يتم تكرار القيم بشكل دوري بحيث يتم تحديث العمود value
بقيم مثل 1 1 1 2 2 2 3 3 3 4 4 4 ...
، يمكنك استخدام الطريقة التالية:
sqlCREATE TABLE example (
id INT AUTO_INCREMENT PRIMARY KEY,
value INT,
count INT DEFAULT 0
);
DELIMITER $$
CREATE TRIGGER update_value_trigger
BEFORE INSERT ON example
FOR EACH ROW
BEGIN
DECLARE max_count INT;
SET max_count = 3; -- العدد الأقصى للظهور
IF NEW.count >= max_count THEN
SET NEW.count = 0;
SET NEW.value = (SELECT MAX(value) + 1 FROM example);
ELSE
SET NEW.count = NEW.count + 1;
END IF;
END$$
DELIMITER ;
INSERT INTO example (value) VALUES (1), (1), (1), (1), (1), (2), (2), (2), (2), (2), (3), (3), (3), (3), (3);
SELECT * FROM example;
في هذا المثال، يتم تحديث value
ليكون أكبر قيمة موجودة + 1 عندما يتم إدخال قيمة جديدة تتجاوز الحد الأقصى المحدد (هنا 3). عندما يصل count
إلى الحد الأقصى، يتم تعيينه إلى الصفر مرة أخرى.