Autor | Zpráva | ||
---|---|---|---|
Návštěvník Profil * |
#1 · Zasláno: 16. 2. 2014, 22:28:50
Nejedná se o problém s databází, ale řeším podmínku. Tenhle problém řeším už delší dobu a nevím si s ním rady. V metodě, která provádí SQL dotaz na select občas vracím počet záznamů. Obvykle sice vracím pole $data, které obsahuje nalezené záznamy, ale někdy potřebuju vracet jen ten počet a to je právě když tam je klíč 'total'.
Zkoušel jsem to takhle: return isset($tmp->data[0]['total']) ? $tmp->data[0]['total']: (isset($tmp->data[0]['last_id'])?$tmp->data[0]['last_id']:$tmp->data); Ale vypadá to, že když klíč total existuje, ale neobsahuje žádnou hodnotu tak automaticky vrátí celou strukturu dat místo hodnotu null. Což mi následně způsobuje chyby v příkazech kde je očekávané číslo. Zkoušel jsem přidat OR $tmp->data[0]['total']==null return isset($tmp->data[0]['total']) OR $tmp->data[0]['total']==null ? $tmp->data[0]['total']: (isset($tmp->data[0]['last_id'])?$tmp->data[0]['last_id']:$tmp->data); Jenže to pak zase bude hlásit v případech kdy nezjišťuji počet, že klíč total neexistuje, protože to skočí do té druhé části podmínky.... Jsem z toho už vyřízený, tak snad někdo poradí... |
||
Návštěvník Profil * |
#2 · Zasláno: 16. 2. 2014, 23:39:27
Tak ještě pro přehled, výpis objektu tmp:
Query Object ( [filename] => [query] => SELECT COUNT(new_mes) as total FROM relations WHERE target_user='15' AND lastdate != 0 AND status > 6 [tmpintdir] => [UseCache] => [data] => Array ( [0] => Array ( [total] => 0 ) ) ) |
||
Tori Profil |
#3 · Zasláno: 17. 2. 2014, 08:21:12
Návštěvník:
Nevím, jestli se tak chovají všechny DB vrstvy, ale mysql_* funkce vrací všechna data jako řetězec (takže volným porovnáním "0" == NULL ).
Jinak ale z hlediska jiného programátora, který by někdy mohl pracovat s vaším kódem, bych místo téhle magie (vracení různých hodnot podle (ne)existence nějakého indexu) radši měla dvě různé metody: DB::getData($query) co vrátí celé pole dat, a DB::getValue($query) co vrátí hodnotu prvního sloupce v prvním řádku dat bez ohledu na jeho název.
|
||
Časová prodleva: 10 let
|
0