Mysql
 sql >> база данни >  >> RDS >> Mysql

Динамично избирайте колони въз основа на стойността на колоната

Можете да опитате да го разрешите от страна на SQL. Но все пак ще трябва да използвате PHP, за да напишете тази луда заявка динамично. Или още по-лошо – ще пишете програмен код на SQL. Докато последващата обработка в PHP е доста проста:

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

Това всъщност са три реда доста прост код. Резултатът от var_export($row) :

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

Както виждате, полето с NULL е премахнато.

Дори по-добре:поддържайте заявката си проста и просто изберете test2 вместо IF(test2 = "myText" , test2, FALSE) AS test2_Alias . И след това "динамично" създайте test2_Alias ако е необходимо:

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

Да - това е скучно. Нищо изискано. Но ще харесате простия код, когато се опитате да поправите някои грешки.

Актуализация

От нашия чат:

Ако приемем, че вашата „конкретна стойност“ се съхранява в $specificValue .

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

Това е. IMHO е по-добре от изпълнението на две заявки като:

$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. Сума от колони при използване на mysqli и php

  2. Как мога да проверя (My)SQL изразите за синтактична коректност

  3. Mysql заявка за изтриване на записи след избор..?

  4. Rails SQL заявка за неизвестен (динамичен) брой заявки, използвайки LIKE

  5. MySQL QUERY LIKE не връща нищо