Utilisez des déclencheurs pour générer des horodatages Unix lors de l'insertion tout en permettant le clonage des enregistrements existants et en évitant la duplication
P粉947296325
P粉947296325 2024-01-10 17:51:06
0
1
372

Je crée un système d'événements. Disons qu'il y a un événement appelé « Go Dance » le 12 septembre 2022.

Lorsqu'un événement est ajouté à la base de données, nous créons un horodatage unix sur l'une des lignes. Nous utilisons le unix_timestamp() par défaut pour ce faire

Cet horodatage (par exemple 654213987) est utilisé dans le cadre de l'URL afin que les gens puissent s'inscrire à l'événement 654213987. Par exemple, les gens peuvent s'inscrire ici. http://myevents/signup/654213987

L'organisateur de l'événement a rédigé la description de l'événement le 12 septembre 2022.

L'organisateur de l'événement souhaite organiser le même événement l'année prochaine mais ne veut pas réécrire la description. Copiez ou clonez simplement le fichier original sans le supprimer.

Cela se fait facilement par programme en PHP, mais j'utilise XCRUD et je ne peux pas le modifier, donc mes seules options sont d'utiliser des déclencheurs ou une partie câblée de MYSQL.

Lorsque XCRUD effectue une copie, il utilise un INSERT normal contenant la copie originale moins la copie principale.

Si je rends la colonne unique, cela ne permet pas le clonage. Sinon, il copie l'horodatage.

Est-il possible de créer un déclencheur (ou un autre mécanisme) pour reconnaître qu'un doublon existe et remplacer le doublon par un autre nouvel horodatage ?

J'ai vu sur stackoverflow que vous pouvez ajouter des horodatages à l'aide de déclencheurs, mais je ne sais tout simplement pas comment le faire pour éviter la duplication.

P粉947296325
P粉947296325

répondre à tous(1)
P粉057869348

Exemple.

CREATE TABLE test (id INT, ts DATE);
CREATE TRIGGER tr_bi_test_add_1_week
BEFORE INSERT ON test
FOR EACH ROW
BEGIN
    WHILE EXISTS ( SELECT NULL
                   FROM test
                   WHERE ts = NEW.ts ) DO
        SET NEW.ts = NEW.ts + INTERVAL 1 WEEK;
    END WHILE;
END
INSERT INTO test VALUES (1, '2022-01-01'); 
-- inserted as-is
SELECT * FROM test;
id ts
1 2022-01-01
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal