Autor Zpráva
xtas
Profil
Zdravím,

můžete mi plz někdo osvětlit jak mám přistupovat k výsledku dotazu pomocí fetch_object() když je v sql dotazu použito MAX? (php5 + mysql)

tedy konkrétně co nejvíc ořezaný dotaz:

SELECT semonlog.srvid, MAX(semonlog.date) from .....

dál to načtu do $obj (pomocí fetch_object()) , a normálně ke všem výsledkům přistupuju ($obj->srvid apod.) a vše je ok kromě semonlog.date.

při $obj->date to píše Undefined property: stdClass::$date
při $obj->semonlog.date Undefined property: stdClass::$semonlog

tak jsem si pomocí print_r zjistil co si o tom objektu myslí system:

stdClass Object ( [srvid] => 1 [MAX(semonlog.date)] => 2013-08-20 14:14:02

nicméně při použití $obj->MAX(semonlog.date) nebo MAX(date) to píše
Notice: Undefined property: stdClass::$MAX

přes fetch_row() to pochopitelně funguje. V čem je problém / jak na to?

díky za nápady
juriad
Profil
Tak si ten sloupec prejmenuj
SELECT semonlog.srvid, MAX(semonlog.date) AS maximum from .....
A pak ve výsledku k němu přistupuj podle toho jména.
xtas
Profil
díky, tohle je jedno z řešení. Ale zajímá mě proč se to děje? sql vrátí změněný název té položky (přidá MAX()) a pak už se k ní nedá přes objekt (původní ani změněný název) přistoupit, protože to už není syntakticky správně? Nebo dá a dělám to blbě?
juriad
Profil
Lze to, ale otázkou je, jestli je to hezké; já bych rozhodně ten sloupec prostě přejmenoval.
<?php
class Trida {
  function __construct($var, $value) {
    $this->$var = $value;
  }
}

$var = 'MAX(a, b)';
$trida = new Trida($var, 1);
echo $trida->$var;
Tori
Profil
xtas:
při použití $obj->MAX(semonlog.date) nebo MAX(date) to píše
Notice: Undefined property: stdClass::$MAX

viz [#4], anebo $obj->{"MAX(semonlog.date)"}. Nicméně už z logiky pojmenovávání proměnných je lepší dát alias - nechcete přeci "výsledek volání funkce MAX nad sloupcem date", ale prostě "nejvyšší datum".

sql vrátí změněný název té položky (přidá MAX())
MAX() jste přidal vy. MySQL vrací přesně to, o co si řeknete.
xtas
Profil
diky vsem za vysvetleni

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:

0