Maison  >  Article  >  développement back-end  >  Résolvez parfaitement le problème de l'insertion des mêmes données dans Thinkphp3.2

Résolvez parfaitement le problème de l'insertion des mêmes données dans Thinkphp3.2

不言
不言original
2018-06-07 11:13:552448parcourir

L'article suivant vous apporte une solution parfaite au problème de l'insertion des mêmes données dans Thinkphp3.2. Le contenu est assez bon, je vais donc le partager avec vous maintenant et le donner comme référence.

Description du problème

Lors de l'insertion de données à l'aide de TP3.2 aujourd'hui, afin d'éviter d'insérer les mêmes données (les soi-disant mêmes données , sa clé primaire est la même ou les champs de l'index unique sont les mêmes). L'index que j'ai créé est comme indiqué ci-dessous. L'index de clé primaire est un champ à incrémentation automatique est impossible, c'est-à-dire l'index unique. peut être dupliqué. Ce que je veux, c'est l'uid, l'année, le mois, le jour. Si les trois champs apparaissent identiques, l'enregistrement actuel sera mis à jour.

Solution du problème

Quand nous avons été confrontés à un tel problème auparavant, nous, vous savez, MySQL fournit ON DUPLICATE KEY UPDATE ou REPLACE INTO pour résoudre ce problème.

Utiliser ON DUPLICATE KEY UPDATE

Avant d'insérer des données, il n'y a qu'un seul enregistrement dans le tableau, comme indiqué ci-dessous

L'instruction SQL est la suivante, lors de l'insertion d'un enregistrement, s'il est identique à l'enregistrement existant dans la table, le nouvel enregistrement sera mis à jour, sinon l'enregistrement sera inséré.

INSERT INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 3, 1) 
ON DUPLICATE KEY 
UPDATE 
`status` = 
VALUES
(`status`),
`updated_ts` = NOW();

Utilisez REPLACE INTO

Le code est le suivant :

Exécutez d'abord le code suivant pour insérer un morceau de données

REPLACE INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 2, 1)

L'effet est comme indiqué ci-dessous

Exécutez à nouveau le code suivant et le code inséré ci-dessus sera mis à jour

REPLACE INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 2, 5)

L'effet est comme indiqué ci-dessous

La différence entre ON DUPLICATE KEY UPDATE et REPLACE INTO

Lorsque la même valeur apparaît, ON DUPLICATE KEY UPDATE met à jour l'enregistrement existant et REPLACE INTO supprime l'enregistrement précédent puis insère un nouvel enregistrement.

Solution dans Thinkphp3.2

Dans Thinkphp3.2, l'insertion est gérée de la même manière via le troisième paramètre de la fonction add() Problèmes de données.

La méthode add() dans Model.class.PHP appelle la méthode insert dans Db.class.php Dans la méthode insert, nous pouvons voir le code suivant :

<.>

Où $replace se trouve être le troisième paramètre de la méthode add.

Recommandations associées :

ajout, suppression, modification de la base de données de la version thinkphp3.2.3 et vérification du code d'implémentation

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn