J'ai une table MYSql avec les colonnes id, nom, description et statut. La colonne id est incrémentée automatiquement et est la clé primaire. Maintenant, je veux ajouter une autre colonne à la table nommée 'display_priority'. Je veux que les enregistrements soient extraits en utilisant «ordre par» sur cette colonne.

Comment puis-je remplir automatiquement cette table (en fonction de l'ID) lors de l'insertion d'enregistrements? Les valeurs display_priority n'ont pas d'importance lors de l'insertion. Il doit être réorganisé ultérieurement, à un moment donné, avant d'afficher les enregistrements. Mais les valeurs insérées doivent être uniques.

De l'aide? Merci d'avance.

Edit: Je sais que cela peut être fait par un déclencheur après insertion. Et si, je voulais éviter un déclencheur. Une autre façon?

0
Penguine 24 nov. 2017 à 10:04

3 réponses

Meilleure réponse

Vous prenez l'id max de la table et ajoutez 1 comme prédiction d'id auto-incrémentée.

INSERT INTO `table_name` (col1, col2, col3) 
SELECT val1, val2, max(id) + 1 AS val3 FROM `table_name`;

<!-- id is auto-incremented -->

Example 

INSERT INTO `users` (name, email, display_priority) 
SELECT 'Dave', 'dave@email.com', max(id) + 1 AS display_priority FROM `users`;
1
Lwin Htoo Ko 24 nov. 2017 à 07:28

Vous pouvez ajouter une mise à jour de sorcière TRIGGER le display_priority lors de l'insertion et la valeur est le maximum de display_priority plus un.

CREATE TRIGGER table_name BEFORE INSERT ON display_priority
       FOR EACH ROW SET @sum = (SELECT MAX(display_priority)+1 FROM table_name);
0
Marcus 24 nov. 2017 à 07:21

Si vous voulez éviter TRIGGER, vous pouvez utiliser l'actuel UNIX_TIMESTAMP ou CURRENT_TIMESTAMP comme valeur par défaut. Mais si remorquer ou plus INSERT à la même seconde vous avez un problème ...

display_priority TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
1
Marcus 24 nov. 2017 à 07:25
47467931