Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tự động chọn cột dựa trên giá trị cột

Bạn có thể thử giải quyết nó trên SQL. Nhưng bạn vẫn sẽ cần sử dụng PHP để viết động truy vấn điên rồ đó. Hoặc tệ hơn - Bạn sẽ viết mã chương trình bằng SQL. Trong khi xử lý bài viết bằng PHP khá đơn giản:

// $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});
    }
}

Đó thực sự là ba dòng mã khá đơn giản. Kết quả từ var_export($row) :

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

Như bạn thấy, trường có NULL sẽ bị xóa.

Tốt hơn nữa:hãy giữ cho truy vấn của bạn đơn giản và chỉ cần chọn test2 thay vì IF(test2 = "myText" , test2, FALSE) AS test2_Alias . Và sau đó "động" tạo test2_Alias nếu cần:

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

Vâng - điều đó thật nhàm chán. Không có gì lạ mắt. Nhưng bạn sẽ thích mã đơn giản, khi bạn cố gắng sửa một số lỗi.

Cập nhật

Từ cuộc trò chuyện của chúng tôi:

Giả sử "giá trị cụ thể" của bạn được lưu trữ trong $specificValue .

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

Đó là nó. IMHO tốt hơn là thực hiện hai truy vấn như:

$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. Cách nhập cơ sở dữ liệu MySQL trong dòng lệnh

  2. Hiểu biết / mySQL hay còn gọi là lừa các mối quan hệ ForeignKey trong Django

  3. Di chuyển hàng mysql sang một bảng khác trong cùng một cơ sở dữ liệu

  4. Tìm nạp thông tin từ cơ sở dữ liệu MYSQL &Codeigniter

  5. PreparedStatement sẽ không bao giờ hết thời gian chờ ngay cả khi được đặt rõ ràng