recherche

Maison  >  Questions et réponses  >  le corps du texte

La procédure MySQL ignore les derniers enregistrements

J'ai les trois tableaux suivants ;

hm_deliverylog
+------------+----------------------------------+------------------------------------------------------------------------------------+---------------------+-----------------+--------------------------+-------------------+----------+---------+
| deliveryid | deliveryfrom                     | deliveryfilename                                                                   | deliverytime        | deliverysubject | deliverybody             | deliveryipaddress | subjnotr | islendi |
+------------+----------------------------------+------------------------------------------------------------------------------------+---------------------+-----------------+--------------------------+-------------------+----------+---------+
|          1 | [email protected]              | C:\Program Files (x86)\hMailServer\Data\{BACBEB1F-3852-4CD0-A963-337CA956879E}.eml | 2022-04-11 12:47:13 | Hmail Test      | TEST MESAJI PLAIN-TEXT
 | NULL              | NULL     |       0 |
+------------+----------------------------------+------------------------------------------------------------------------------------+---------------------+-----------------+--------------------------+-------------------+----------+---------+
1 row in set (0.002 sec)

m_deliverylog_recipients
+---------------------+------------+--------------------------+
| deliveryrecipientid | deliveryid | deliveryrecipientaddress |
+---------------------+------------+--------------------------+
|                   1 |          1 | [email protected]         |
+---------------------+------------+--------------------------+
mlog
+-------+-------+---------------------+-----------+------------------+------------+---------+---------------------+-----------+------------+
| pr_id | delid | gonderen            | gonip     | alici            | konu       | mesaj   | gontar              | olusturma | guncelleme |
+-------+-------+---------------------+-----------+------------------+------------+---------+---------------------+-----------+------------+
|     1 |     1 | [email protected] | 10.0.0.83 | [email protected] | Hmail Test | Testing | 2022-05-13 09:37:16 | NULL      | NULL       |
+-------+-------+---------------------+-----------+------------------+------------+---------+---------------------+-----------+------------+
1 row in set (0.000 sec)

J'essaie de fusionner les données de deux tables dans une autre table en utilisant la procédure suivante ;

CREATE DEFINER=`root`@`localhost` PROCEDURE `mlog_birlestir`()
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
INSERT INTO mlog (delid,gonderen,gonip,alici,konu,mesaj,gontar)
SELECT hm_deliverylog.deliveryid, hm_deliverylog.deliveryfrom, hm_deliverylog.deliveryipaddress, hm_deliverylog_recipients.deliveryrecipientaddress, hm_deliverylog.deliverysubject, hm_deliverylog.deliverybody, hm_deliverylog.deliverytime
from hm_deliverylog,hm_deliverylog_recipients WHERE hm_deliverylog.deliveryid=hm_deliverylog_recipients.deliveryid;
END

Créez un déclencheur avant l'événement d'insertion de hm_deliverylog et appelez le processus comme suit :

call mlog_birlestir()

Avec les étapes ci-dessus, lorsque des enregistrements sont créés sur hm_deliverylog et hmdeliverylog_recipients, les données doivent être fusionnées et créer de nouveaux enregistrements sur mlog. Mais il saute toujours le premier enregistrement et suit avec un retard d'un enregistrement (désolé, mon anglais n'est pas assez bon pour expliquer cette situation), laissez-moi vous expliquer comme suit :

1-Suppression de tous les enregistrements sur 3 tables

2- Insérez le premier enregistrement dans hm_deliverylog et hm_deliverylog_recipients

3- Enregistrement attendu sur mlog : non créé

4- Créez un deuxième enregistrement sur hm_deliverylog et hm_deliverylog_recipients

5- Deux enregistrements attendus sur mlog : Le premier enregistrement est créé sur mlog, mais il n'y a pas de deuxième enregistrement

6- Création d'un troisième enregistrement sur hm_deliverylog et hm_deliverylog_recipients

7-3 enregistrements attendus sur mlog : Le deuxième enregistrement a été créé sur le mlog, mais il n'y a pas eu de troisième enregistrement

Voici le truc, il en crée toujours un avant le dernier enregistrement du mlog et ignore le dernier enregistrement.

J'ai essayé de changer l'événement du déclencheur en AFTER INSERT mais cela n'a pas résolu le problème.

Des enregistrements sont créés sur les deux premières tables traitées par le programme mais je n'ai aucun contrôle dessus et je recherche une solution de contournement pour résoudre ce problème.

Qu'est-ce qui me manque ici ?

P粉550323338P粉550323338264 Il y a quelques jours497

répondre à tous(1)je répondrai

  • P粉294954447

    P粉2949544472024-04-04 16:33:24

    Grâce à @Akina, j'ai résolu ce problème.

    Mon code va bien mais j'ai fait une erreur de logique, je crée un déclencheur qui appelle une procédure sur hm_deliverylog (première table), ce que je devrais faire est de créer un déclencheur sur hm_deliverylog_recipients (deuxième table), car l'application insère le principal en premier insère les données dans la première table, puis insère les données du destinataire dans la deuxième table. Ainsi, lorsque je règle le déclencheur sur la première table, il s'exécute mais vérifie la deuxième table, mais il n'y a pas encore d'enregistrements dans la deuxième table, c'est pourquoi il ne crée pas la table des enregistrements sur la troisième table.

    Lorsque je crée le déclencheur sur la deuxième table, cela fonctionne bien.

    Merci encore @Akina pour le rappel

    répondre
    0
  • Annulerrépondre