Rumah  >  Soal Jawab  >  teks badan

Prosedur MySQL melangkau rekod terkini

Saya mempunyai tiga jadual berikut;

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)

Saya cuba menggabungkan data daripada dua jadual ke dalam jadual lain menggunakan prosedur berikut;

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

Buat pencetus sebelum acara sisipan hm_deliverylog dan panggil proses seperti berikut

call mlog_birlestir()

Dengan langkah di atas, apabila rekod dibuat pada hm_deliverylog dan hmdeliverylog_recipients, ia harus menggabungkan data dan mencipta rekod baharu pada mlog. Tetapi ia sentiasa melangkau rekod pertama dan mengikuti dengan kelewatan 1 rekod (maaf Bahasa Inggeris saya tidak cukup baik untuk menerangkan situasi ini), izinkan saya menerangkan seperti berikut

1-Memadam semua rekod pada 3 jadual

2- Masukkan rekod pertama ke dalam hm_deliverylog dan hm_deliverylog_recipients

3- Rekod yang dijangkakan pada mlog: tidak dibuat

4- Buat rekod kedua pada hm_deliverylog dan hm_deliverylog_recipients

5- Dua rekod dijangka pada mlog: Rekod pertama dibuat pada mlog, tetapi tiada rekod kedua

6- Mencipta rekod ketiga pada hm_deliverylog dan hm_deliverylog_recipients

7-Dijangka 3 rekod pada mlog: Rekod kedua dicipta pada mlog, tetapi tiada rekod ketiga

Inilah perkaranya, ia sentiasa mencipta satu sebelum rekod terkini pada mlog dan melangkau rekod terkini.

Saya cuba menukar peristiwa pencetus kepada SELEPAS INSERT tetapi itu tidak menyelesaikan masalah.

Rekod dibuat pada dua jadual pertama yang diproses oleh program tetapi saya tidak mempunyai kawalan ke atasnya dan saya sedang mencari penyelesaian untuk menyelesaikan isu ini.

Apa yang saya hilang di sini?

P粉550323338P粉550323338181 hari yang lalu367

membalas semua(1)saya akan balas

  • P粉294954447

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

    Terima kasih kepada @Akina, saya menyelesaikan masalah ini.

    Kod saya baik tetapi saya membuat ralat logik, saya mencipta pencetus yang memanggil prosedur pada hm_deliverylog (jadual pertama), apa yang saya harus lakukan ialah mencipta pencetus pada hm_deliverylog_recipients (jadual kedua) , kerana aplikasi memasukkan utama dahulu memasukkan data ke dalam jadual pertama dan kemudian memasukkan data penerima ke dalam jadual kedua, jadi apabila saya menetapkan pencetus ke jadual pertama ia berjalan tetapi menyemak jadual kedua, tetapi belum ada rekod dalam jadual kedua, itulah sebabnya tidak mencipta jadual rekod pada jadual ketiga.

    Apabila saya mencipta pencetus pada jadual kedua ia berfungsi dengan baik.

    Terima kasih sekali lagi @Akina atas peringatan

    balas
    0
  • Batalbalas