Autor Zpráva
Návštěvník
Profil *
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 *
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: