Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara melakukan kueri mysql PDO kedua dalam loop sementara dari kueri lain?

Ini bukan batasan PDO, ini batasan perpustakaan klien MySQL. MySQL hanya mendukung satu kueri yang sedang berlangsung dalam satu waktu. Anda tidak dapat menjalankan kueri lain saat kueri pertama masih memiliki kursor terbuka (yaitu masih memiliki hasil untuk dikembalikan).

Anda memiliki opsi ini:

  • Gunakan PDOSstatement::fetchAll() dan kumpulkan seluruh rangkaian hasil kueri luar dalam larik PHP. Ini menyelesaikan hasil kueri kueri luar. Kemudian Anda dapat mengulang array dan menjalankan kueri SQL tambahan untuk setiap iterasi loop.

    Tetapi menjalankan kueri baru untuk setiap iterasi loop dari kumpulan hasil luar tidak efisien. Ini adalah cara yang baik untuk mematikan kinerja aplikasi Anda.

    Beberapa orang menyebutnya Masalah Pemilihan N+1 karena Anda menjalankan pemilihan pertama, yang mengembalikan N baris, lalu Anda menjalankan N pemilihan berdasarkan hasil pemilihan pertama.

  • Jika Anda menggunakan MySQL, gunakan PDO::MYSQL_ATTR_USE_BUFFERED_QUERY yang pada dasarnya melakukan hal yang sama, mengunduh semua baris, disimpan dalam array secara internal. Kemudian panggilan berikutnya ke fetch() ulangi saja hasil yang di-buffer.

    Tapi ini juga melibatkan antipattern N+1 Selects.

  • Lebih baik menulis satu kueri SQL yang memberi Anda nilai yang Anda inginkan. Menebak dari komentar Anda, Anda ingin kategori dan jumlah baris terkait dari tabel lain di mana kategori_id cocok. Berikut ini contoh kueri SQL tersebut:

    $db->pquery("SELECT c.`category_id`, c.`category_name`, COUNT(*) AS `count`
    FROM `database_categorys` AS c 
    LEFT OUTER JOIN `other_table` AS t ON t.category_id = c.category_id
    GROUP BY c.category_id
    ORDER BY c.`category_name` ASC");
    

Bergabung adalah bagian mendasar dari SQL. Jika Anda mencoba menggunakan SQL tanpa belajar menggunakan gabungan, ini seperti menggunakan PHP tanpa belajar menggunakan while loop.

Mulai di sini:Penjelasan Visual dari SQL Bergabung .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak dapat mengubah kolom yang digunakan dalam batasan kunci asing

  2. Permintaan MySQL:Cocokkan nilai yang dipisahkan koma dengan kolom yang berisi string yang dipisahkan koma

  3. Pengelompokan MySQL berdasarkan minggu, berdasarkan kolom tanggal?

  4. Perbarui menggunakan pernyataan PDO

  5. Bagaimana saya bisa menggunakan executemany untuk memasukkan ke MySQL daftar kamus dengan Python