SQL Case in Zend Framework
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