Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memindahkan Alamat E-mel Pengguna ke Lajur Hanya Menunjukkan Tiga Yang Terbaru?

Bagaimana untuk Memindahkan Alamat E-mel Pengguna ke Lajur Hanya Menunjukkan Tiga Yang Terbaru?

Patricia Arquette
Lepaskan: 2025-01-10 15:41:45
asal
870 orang telah melayarinya

How to Transpose User Email Addresses into Columns Showing Only the Three Newest?

Pindahkan alamat e-mel pengguna ke dalam lajur untuk menunjukkan rekod terkini

Andaikan anda mempunyai jadual yang menyenaraikan berbilang alamat e-mel untuk setiap pengguna. Matlamatnya adalah untuk menukar e-mel ini ke dalam lajur yang menunjukkan tiga alamat "terbaru" berdasarkan tarikh pembuatannya. Ini akan menghasilkan jadual output yang kelihatan seperti ini:

user_name user_id email1 email2 email3
Mary 123 [email protected] [email protected] [email protected]
Joe 345 [email protected] (NULL) (NULL)

Untuk mencapai transposisi ini, kita boleh menggunakan fungsi tab silang() dalam modul tablefunc:

SELECT * FROM crosstab(
   $$SELECT user_id, user_name, rn, email_address
     FROM  (
        SELECT u.user_id, u.user_name, e.email_address
             , row_number() OVER (PARTITION BY u.user_id
                            ORDER BY e.creation_date DESC NULLS LAST) AS rn
        FROM   usr u
        LEFT   JOIN email_tbl e USING (user_id)
        ) sub
     WHERE  rn <= 3
   $$,
   $$SELECT generate_series(1,3)$$
) AS ct (user_id int, user_name text, email1 text, email2 text, email3 text);
Salin selepas log masuk
Kenyataan

luaran SELECT mengekstrak data khusus pengguna, mengehadkan keputusan kepada tiga alamat e-mel terbaharu berdasarkan fungsi row_number(). Fungsi crosstab() kemudian menukar e-mel ini ke dalam lajur, memastikan nilai yang hilang diwakili sebagai NULL.

Atas ialah kandungan terperinci Bagaimana untuk Memindahkan Alamat E-mel Pengguna ke Lajur Hanya Menunjukkan Tiga Yang Terbaru?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan