SQL Case in Zend Framework

edit | delete

Autor: Ingmar Pforr

eingetragen: Donnerstag, 23. September 2010 um 11:30 Uhr (38/2010 Kalenderwoche)

geändert: Donnerstag, 23. September 2010 um 11:30 Uhr (38/2010 Kalenderwoche)

Keywords: SQL CASE in Zend Framework

Kategorien: DB: MySQL, DB: PostgreSQL, DB: Oracle, DB: MariaDB,

Text:

Problem: Boolsches Feld in String 'ja' und 'nein' umwandeln.
Lösung:
Im From-Teil im Spalten-Array den Ausdruck für den Spaltenname ersetzen durch die Case Anweisung IN KLAMMERN(!)


siehe Spalte i.importiert

Quellcode:  

$db = Zend_Db_Table::getDefaultAdapter();
        $select = $db->select()
        ->from(
        array('i' => Application_Model_DbTable_FImportStat::TABLE_NAME ),
        array(
                'Zeitstempel' => Application_Model_DbTable_FImportStat::COL_TIMESTAMP,
                'importiert' => '(CASE ' . 'i.' . Application_Model_DbTable_FImportStat::COL_IMPORTIERT . " WHEN TRUE THEN 'ja' ELSE 'nein' END)",
                'Dateiname' => Application_Model_DbTable_FImportStat::COL_DATEINAME,
                'Datensätze gesamt' => Application_Model_DbTable_FImportStat::COL_DATENS_GESAMT_ANZ,
                
        ))
        ->order(Application_Model_DbTable_FImportStat::COL_ID)
        ->join(
        array('u' => Application_Model_DbTable_AppUser::TABLE_NAME),
                        'i.' . Application_Model_DbTable_FImportStat::COL_USER_ID . ' = ' . 'u.' . Application_Model_DbTable_AppUser::COL_ID,
        array('Benutzername' => 'u.' . Application_Model_DbTable_AppUser::COL_USERNAME,))
        ->joinLeft(
        array('b' => Application_Model_DbTable_LuBundesland::TABLE_NAME),
                        'u.' . Application_Model_DbTable_AppUser::COL_BUNDESLAND_ID . ' = ' . 'b.' . Application_Model_DbTable_LuBundesland::COL_ID,
        array('Bundesland' => 'b.' . Application_Model_DbTable_LuBundesland::COL_KURZ,))
        ;

erzeugt

SELECT "i"."impstat_timestamp" AS "Zeitstempel", (CASE i.impstat_importiert WHEN TRUE THEN 'ja' ELSE 'nein' END) AS "importiert", "i"."impstat_dateiname" AS "Dateiname", "i"."impstat_datens_gesamt_anz" AS "Datensätze gesamt", "u"."user_username" AS "Benutzername", "b"."bundesland_kurz" AS "Bundesland" FROM "f_import_stat" AS "i" INNER JOIN "app_user" AS "u" ON i.user_id = u.user_id LEFT JOIN "lu_bundesland" AS "b" ON u.bundesland_id = b.bundesland_id ORDER BY "impstat_id" ASC