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

Bagaimana cara memilih kolom berdasarkan posisi numeriknya dalam sebuah tabel?

Anda hampir TIDAK PERNAH mengandalkan nomor kolom dalam tabel di salah satu kode Anda (meskipun secara teoritis Anda BISA melakukannya secara teknis).

Ada banyak alasan, salah satu yang paling penting adalah bahwa seseorang selalu dapat MENGUBAH tabel dan menyisipkan kolom di awal / tengah, melanggar kode Anda sepenuhnya.

Alasan kedua adalah bahwa posisi kolom - bahkan jika Anda berasumsi bahwa tabel tidak pernah berubah - membuatnya benar-benar TIDAK DAPAT DIBACA dan oleh karena itu tidak mungkin untuk mempertahankan kode. Ingatkah Anda bahwa kolom 13 adalah "last_name_3" 2 tahun dari sekarang?

Harap perhatikan bahwa jika masalah Anda adalah misalnya Anda memiliki sesuatu seperti SELECT fn11, fn12, fn13, ... fn32 dalam kode Anda, dan Anda merasa bahwa mengeja fn11..fn32 adalah hambatan, Anda tidak hanya 100% benar, tetapi Anda harus benar-benar menghapus hambatan tersebut melalui idiom Perl, sebagai berikut:"SELECT " . join(", ", map { "fn$_" } (11..32));

Karena itu, jika Anda ingin tahu bagaimana melakukannya secara TEORITIS, hanya sebagai latihan "trik teknologi keren", saya tidak tahu cara yang baik untuk melakukannya secara umum melalui DBI, tetapi Anda biasanya dapat melakukannya di database- cara tertentu.

Untuk melakukannya, Anda harus memperhatikan bahwa:

  1. Hampir SEMUA database membuat tabel melalui semacam pernyataan "CREATE TABLE" yang mengambil daftar kolom ORDERED (sebagian besar database relasional sebenarnya secara fisik menyimpan nilai dalam baris dalam urutan itu sehingga penting - bahkan jika kalkulus relasional teoretis memperlakukan kolom sebagai urutan- kurang seperti yang dikatakan marcog).

  2. Hampir SEMUA da;tabase berisi tabel khusus yang mencantumkan tabel mana yang berisi kolom mana (syscolumns di Sybase, INFORMATION_SCHEMA.COLUMNS di MySQL), dan tabel itu berisi ID numerik dari kolom yang digunakan untuk mengurutkannya sama seperti urutan "buat"; atau bahkan bidang "pesanan" khusus (mis. ORDINAL_POSITION nilai di MySQL).

    Jadi, Anda dapat - sebelumnya - menanyakan daftar kolom terurut untuk tabel yang Anda inginkan dan urutannya. Untuk query MySQL, SELECT COLUMN_NAME, ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME="XXX" . Simpan data dalam daftar @columns (atau jika Anda memiliki banyak tabel, hash array, %columns, dengan nama tabel sebagai kuncinya).

    Kemudian, saat membuat kueri, cukup ucapkan

    "select $columns{table1}->[11],$columns{table1}->[13], ...."

    Harap perhatikan bahwa sebenarnya SQL yang dikirim ke server akan berisi nama kolom, TETAPI Anda tidak akan membuat hard-code nama-nama itu di mana pun dalam kode Anda.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kapan menggunakan datetime atau timestamp

  2. Arsitektur database untuk jutaan baris baru per hari

  3. Batasan unik yang memungkinkan nilai kosong di MySQL

  4. MySQL - Masalah dengan membuat fungsi yang ditentukan pengguna (UDF)

  5. Pembagian basis data vs partisi