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

Pilih kolom secara dinamis berdasarkan nilai kolom

Anda dapat mencoba menyelesaikannya di sisi SQL. Tetapi Anda masih perlu menggunakan PHP untuk menulis kueri gila itu secara dinamis. Atau lebih buruk lagi - Anda akan menulis kode program dalam SQL. Sementara pemrosesan pos di PHP cukup sederhana:

// $row = DB::..

$row = (object)[ // result from DB
    'field1' => 'value1',
    'field2' => null,
    'field3' => 'value3'
];

foreach (get_object_vars($row) as $key => $val) {
    if ($val === null) {
        unset($row->{$key});
    }
}

Itu secara efektif tiga baris kode yang cukup sederhana. Hasil dari var_export($row) :

stdClass::__set_state(array(
   'field1' => 'value1',
   'field3' => 'value3',
))

Seperti yang Anda lihat, bidang dengan NULL dihapus.

Lebih baik lagi:buat kueri Anda tetap sederhana dan cukup pilih test2 alih-alih IF(test2 = "myText" , test2, FALSE) AS test2_Alias . Dan kemudian "secara dinamis" buat test2_Alias jika diperlukan:

if ($row->test2 == 'myText') {
    $row->test2_Alias = $row->test2;
}

Ya - itu membosankan. Tidak ada yang mewah. Tetapi Anda akan menyukai kode sederhana, ketika Anda mencoba memperbaiki beberapa bug.

Perbarui

Dari obrolan kami:

Dengan asumsi "nilai spesifik" Anda disimpan di $specificValue .

$row = DB::('example')->select('test1, test2, test3')->first();
if ($row->test2 != $specificValue) {
    unset($row->test2, $row->test3);
}

Itu dia. IMHO lebih baik daripada menjalankan dua kueri seperti:

$test2 = DB::('example')->value('test2');
$select = ($test2 == $specificValue) 
    ? 'test1, test2, test3'
    : 'test1';
$row = DB::('example')->select($select)->first();



  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 masuk ke mysql 5.7.9 setelah mengubah kata sandi

  2. Menghubungkan ke DB Mysql dengan C# - Perlu beberapa dengan Kumpulan Data

  3. bagaimana saya bisa mencadangkan dan memulihkan tanggal dari basis data mysql

  4. Bisakah saya menerapkan batasan keunikan secara kondisional?

  5. Laporan Kehadiran di MySql