Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mencapai Kemas Kini Baris dan Pengambilan Dalam Satu Pertanyaan MySQL?

Bagaimana untuk Mencapai Kemas Kini Baris dan Pengambilan Dalam Satu Pertanyaan MySQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-24 19:48:29462semak imbas

How to Achieve Row Updates and Retrieval in a Single MySQL Query?

Mencapai Kemas Kini Baris dan Pendapatan Dalam Satu Pertanyaan MySQL

Dalam MySQL, melaksanakan berbilang pertanyaan boleh memakan masa. Untuk mengoptimumkan prestasi, menggabungkan pertanyaan menjadi satu adalah wajar. Ini ialah inti dari pertanyaan yang dikemukakan oleh Quan: bolehkah dua pertanyaan digabungkan untuk mengembalikan baris yang dikemas kini?

Pertanyaan pertama memilih baris daripada jadual berdasarkan kriteria tertentu, manakala baris kemas kini kedua memenuhi kriteria yang sama. Menggabungkan pertanyaan ini memerlukan teknik yang membolehkan kedua-dua membaca dan menulis dalam satu operasi.

Satu pendekatan ialah menggunakan subkueri. Walau bagaimanapun, Quan menghadapi batasan dengan kaedah ini. Penyelesaian alternatif muncul dalam pengesyoran daripada https://gist.github.com/PieterScheffers/189cad9510d304118c33135965e9cddb:

SET @uids := null;
UPDATE footable
   SET foo = 'bar'
 WHERE fooid > 5
   AND ( SELECT @uids := CONCAT_WS(',', fooid, @uids) );
SELECT @uids;

Pertanyaan ini memanfaatkan langkah berikut:

    (@uids) kepada null.
  1. Gunakan pernyataan KEMASKINI untuk mengubah suai baris yang memenuhi kriteria sambil menambahkan nilai fooidnya pada @uids, mencipta senarai yang dipisahkan koma.
  2. Laksanakan pernyataan SELECT untuk mendapatkan semula nilai @uids yang dikemas kini, yang mengandungi senarai nilai row fooid yang dikemas kini.
Penyelesaian ini menggabungkan kedua-dua kemas kini dan perolehan baris dengan cekap, menyediakan fungsi yang diingini dalam satu pertanyaan.

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Kemas Kini Baris dan Pengambilan Dalam Satu Pertanyaan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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