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
799 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:

<code class="language-sql">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);</code>
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!

sumber:php.cn
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