For the sake of brevity, let's assume we have a numbers table with 2 columns: id & number:
CREATE TABLE numbers(
id INT NOT NULL AUTO_INCREMENT,
NUMBER INT NOT NULL,
PRIMARY KEY ( id )
);
I want the number column to auto-increment, but restart from 1 after hitting 100, satisfying the following requirements:
- If there are no records yet, set
numberto 1. - If there are already records in the table:
- If the last record's
numberis less than 100, setnumberto that + 1. - If the last record's
numberis 100 or more, setnumberto 1.
- If the last record's
Here's what I have so far:
INSERT INTO `numbers` (`number`)
VALUES (
IF(
IFNULL(
(SELECT `number`
FROM `numbers` as n
ORDER BY `id` DESC
LIMIT 1),
0
) > 99,
1,
IFNULL(
(SELECT `number`
FROM `numbers` as n
ORDER BY `id` DESC
LIMIT 1),
0
) + 1
)
)
This works, but uses two identical SELECT queries.
Is there any way to remove the duplicate SELECT?
P.S. I want to do all this within a query. No triggers or stored procedures.
Try to use modulo
%operator