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

Query database dengan hasil dari beberapa tabel?

Contoh umum (dalam PHP):

Membangun SQL dinamis atau membangun kueri SQL Anda dengan bantuan bahasa pemrograman akan terlihat seperti ini (misalnya dalam PHP):

$pdos = $pdo->query("SHOW TABLES LIKE '%_name'");
$tables = $pdos->fetchAll();

$query = 'SELECT * FROM '.implode(' UNION SELECT * FROM ');
$pdo->query($query);

fetchAll metode akan mengembalikan array yang berisi nama setiap tabel yang dipilih.

implode($glue, $array) function mengambil array dan menggabungkan setiap nilai dalam array menggunakan $glue parameter - biasanya Anda mengambil larik nilai dan meledakkannya menggunakan $glue = ',' untuk membuat daftar nilai yang dipisahkan koma.

Dalam kasus kami implode memiliki kueri parsial sebagai $glue untuk membuat satu UNION JOIN besar kueri.

Setelah $query terakhir sedang dibangun seharusnya terlihat seperti:

SELECT * FROM table_1_name
    UNION
SELECT * FROM table_2_name
    UNION
SELECT * FROM table_3_name
    ....
    ....
    UNION
SELECT * FROM table_4000_name

Hasilnya harus berisi semua DISTINCT baris dari 4000 tabel.

Contoh spesifik (dalam format SQL saja):

SELECT    GROUP_CONCAT(
              CONCAT('select * from ', table_name)
              SEPARATOR ' union '
          )
    INTO  @my_variable
    FROM  information_schema.tables
    WHERE table_schema = 'dbname'
    AND   table_name LIKE '%_name';

PREPARE   my_statement FROM @my_variable;
EXECUTE   my_statement;
  • Pernyataan pertama akan mendapatkan semua nama tabel dari information_schema basis data;
  • CONCAT fungsi awalan setiap nama tabel dengan 'SELECT * FROM ' string;
  • GROUP_CONCAT melakukan pekerjaan yang implode akan dilakukan di PHP;
  • INTO klausa memastikan nilai disimpan di dalam variabel bernama my_variable;

  • PREPARE pernyataan mengambil nilai string (seperti yang Anda simpan di my_variable ) dan memeriksa apakah nilainya adalah kueri SQL;

  • The EXECUTE pernyataan mengambil "pernyataan yang disiapkan" dan dengan baik... menjalankannya.

@my_variable adalah variabel sementara tetapi hanya dapat berupa jenis skalar (varchar, int, tanggal, datetime, biner, float, double, dll.) tidak sebuah larik.

GROUP_CONCAT function adalah "fungsi agregat" yang berarti ia mengambil nilai agregat (konsep serupa dengan array - dalam kasus kami, kumpulan hasil kueri kami) dan menampilkan hasil string sederhana.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pilih kueri menggunakan IN() dan tanpa penyortiran apa pun

  2. Pertanyaan dan Jawaban Wawancara MySql Umum Untuk Fresher + Berpengalaman

  3. Mendapatkan gumpalan dengan benar dari database mysql dengan konektor mysql di python

  4. Sisipkan Bersarang ke dalam dan pilih pernyataan

  5. Memasukkan nilai yang bertambah ke dalam sql ini