Mensimulasikan MySQL FIELD() dalam Postgresql
Menukar daripada MySQL kepada PostgreSQL boleh membawa cabaran yang tidak dijangka. Satu isu sedemikian ialah mensimulasikan fungsi ORDER BY FIELD() , yang tidak disokong secara langsung dalam Postgresql.
Dalam MySQL, fungsi FIELD() memberikan kedudukan ordinal kepada nilai dalam senarai tertentu dan menyusun keputusan berdasarkan jawatan-jawatan ini. Sebagai contoh, pertanyaan berikut dalam MySQL:
SELECT * FROM `currency_codes` ORDER BY FIELD(code, 'GBP', 'EUR', 'BBD', 'AUD', 'CAD', 'USD') DESC, name ASC
mengisih jadual currency_codes berdasarkan susunan yang dinyatakan dalam senarai FIELD() dan kemudian mengikut abjad mengikut nama.
Untuk mencapai tingkah laku yang serupa dalam Postgresql, anda boleh menggunakan pernyataan CASE dalam klausa ORDER BY:
SELECT * FROM currency_codes ORDER BY CASE WHEN code='USD' THEN 1 WHEN code='CAD' THEN 2 WHEN code='AUD' THEN 3 WHEN code='BBD' THEN 4 WHEN code='EUR' THEN 5 WHEN code='GBP' THEN 6 ELSE 7 END,name;
Dalam pertanyaan ini, pernyataan CASE memberikan nilai keutamaan (1-6) kepada kod dalam susunan yang ditentukan. Nilai yang tidak ditemui dalam senarai menerima keutamaan lalai sebanyak 7. Hasilnya kemudian diisih mengikut tertib keutamaan menurun dan tertib nama menaik.
Atas ialah kandungan terperinci Bagaimana untuk Mensimulasikan Fungsi FIELD() MySQL dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!