« 1 2
Autor Zpráva
Alphard
Profil
ou, chyba je asi tam, kde jsem si myslel, ale nechal jsem se zmást vaší původní chybou
$row = $db->sql_fetchrow($result);
tohle můžete zjistit jen vy, ale budu-li přepokládat, že tato metoda je analogická k fci mysql_fetch_row()
tak musí fungovat toto:
$result =$db->sql_query("SELECT AVG(zmena) FROM (SELECT zmena FROM ".$tabulka." WHERE idnum='$idnum' ORDER BY id DESC LIMIT 5) AS nzmena WHERE zmena<0");
$row = $db->sql_fetchrow($result); 
$zmena = $row[0];

a nepište, že to nejde :-)
houbeless
Profil
teda nevim, nevim co mi vrátí toto: $zmena = $row[0];
tohle snad ani testovat nebudu, o: $db mi nic nevrátí, ...
nechtěl jste nepsat $zmena = $row[nzmena]; ?? v tom případě jsme se nikam neposunuli...

Jinak jestli to mám chápat jako snahu vrátit počet záznamů z dotazu, tak bych musel použít sql_numrows($result); a to mi přes $db v této kombinaci dotazu nepůjde; co vím, tak to je stavěný na COUNT...takže tudy cesta nevede...
Kajman_
Profil *
houbeless
Na možnou chybu jste byl upozorněn už v příspěvku č. 8. Stačí přidat alias za avg (nzmena je alias poddotazu a ne výsledného sloupečku!).

$result =mysql_query($q="SELECT AVG(zmena) prumer FROM (SELECT zmena FROM ".$tabulka." WHERE idnum='$idnum' ORDER BY id DESC LIMIT 5) AS nzmena WHERE zmena<0") or die ($q.": ".mysql_error());
if($row = $mysql_fetch_row($result)) print_r($row);

Pokud bude výsledek existovat, ale bude prázný (v db hodnota null), tak v posledních pěti záznamech k danému idnum není žádná záporná hodnota, takže se průměr nemá z čeho spočítat.
houbeless
Profil
No sláva, konečně z vás vypadlo něco užitečného na co jsem se ptal a to způsob použití chybové hlašky, ze které se něco dozvim, pre klas. použití mi nic nevypsalo..
Použití AVG(zmena) prumer nefunguje, jak jsem již říkal, přičemž je samozřejmné, že v posledních 5 záznamech je alespon 1 záporná hodnota!

Chybové hlášení tedy: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE isin='NL0006033375' ORDER BY id DESC LIMIT 5) WHERE modify<0' at line 1
tedy moje mysql nepodporuje tento syntax (je zvláštní, že phpA na něm ano), přičemž
moje verze MySQL je: 5.0.41-community-nt; # Verze protokolu: 10

Pokud vím, měla by podporovat subselecty, ale toto bude zřejmě trochu jiný problém...
Kajman_
Profil *
No sláva, konečně z vás vypadlo něco užitečného na co jsem se ptal a to způsob použití chybové hlašky

Použijí je ve FAQ! Tvrdil jste, ze mysql_error Vám nevypíše nic a svůj kód, jak ho vypisujete jste sem stále odmítal poslat! Když máte několik chyb ve skriptu, tak se nedivte, že je nikdo všechny nevyčte z křišťálovké koule.

Chyba bude nejspíš těsně před tím where. Nevypsal jsem tam to $q? Tipnul bych, že tam nemáte nastavenou tu tabulku.
houbeless
Profil
..Stačilo by dobře číst: už 11.8 jsem se ptal, jak mám použít mysql_error, protože způsob, jak jsem ho použil já, mi žádnou hlášku(užitečnou) nevrátil!
- Způsob použití dotazu ve skriptu považuji za zbytečnou informaci, která k řešení nespěje...

Ta chybová hlaška je skutečně moje chyba, pre jsem přepsal alias jmena tabulky a přehlédl se, díky za upozornění ;)

Takže váš návrh: AVG(zmena) prumer; vrací poměrně předpokladatelně chybu: Every derived table must have its own alias. A to i v podobě AVG(zmena) AS prumer.

Tedy pokud zapíšu jak jsem řekl, že funguje i v phpA: AVG(zmena) FROM (SELECT....) AS prumer WHERE...
dotaz projde bez chybové hlášky, ale nevrátí žádnou hodnotu, takže jsme tam kde jsme byli.
(Ale aspon jsem se naučil jiné použití m_erroru...)
Kajman_
Profil *
Every derived table must have its own alias. A to i v podobě AVG(zmena) AS prumer.

Nemáte alias za poddotazem. V našem selectu byl "DESC LIMIT 5) AS nzmena WHERE" ale ve Vašem jste ho z nějakého důvodu vypustil "ORDER BY id DESC LIMIT 5) WHERE modify<0'".

projde bez chybové hlášky, ale nevrátí žádnou hodnotu
Pokud vrátí jeden řádek s práznou hodnotou, tak v posledních pěti záznamech k danému idnum není žádná záporná hodnota, takže se průměr nemá z čeho spočítat.

On jestli nebude největší problém mezi židlí a klávesnicí ;-)
houbeless
Profil
On jestli nebude největší problém mezi židlí a klávesnicí ;-)
Taky mám ten dojem, akorát ne ve vztahu k sobě ;)

Nemáte alias za poddotazem. V našem selectu byl "DESC LIMIT 5) AS nzmena WHERE"
je poměrně zoufalá připomínka - hlavně že jsem na to už dříve upozorňoval...

„[i]Pokud vrátí jeden řádek s práznou hodnotou, tak v posledních pěti záznamech k danému idnum není žádná záporná hodnota, takže se průměr nemá z čeho spočítat.

- Nevim jestli jde o provokaci, nebo natvrdlost, ale musím se opakovat, vždy jsou v tab. přítomné nějaké záporné hodnoty! A pokud to potřebuju ověřit, tak při dotazu bez subselectu a tedy s pouhým výpisem (bez průměrování) mě momentálně dotaz vrátí 4 záporná čísla...

Problém bude asi někde jinde....nacož zde, jak se zdá, nikdo neumí odpovědět.
nightfish
Profil
houbeless
No sláva, konečně z vás vypadlo něco užitečného na co jsem se ptal a to způsob použití chybové hlašky, ze které se něco dozvim, pre klas. použití mi nic nevypsalo..
pakliže neumíte zjistit chybu z databázového objektu, který používáte ($db), tak bude lepší použít klasický procedurální přístup...

co tady tedy postrádám? vypsání chybové hlášky (mysql_error()), včetně kompletního dotazu tak, jak jej posíláte do databáze (jak to udělat je uvedeno v již zmíněném FAQ)

jinak chcete-li nadále vést konverzaci dosavadním způsobem, vlákno vám zamknu
Kajman_
Profil *
jinak chcete-li nadále vést konverzaci dosavadním způsobem, vlákno vám zamknu

Omlouvám se, už nebudu v tomhle vláknu zlobit :-)
nightfish
Profil
Kajman_
Omlouvám se, už nebudu v tomhle vláknu zlobit :-)
"chcete-li" bylo zamýšleno jako vykání houbelessovi
houbeless
Profil
nene, končim v diskuzi, vídím, že to nemá smysl...
nightfish
Profil
houbeless
nene, končim v diskuzi, vídím, že to nemá smysl...
vaše přání je mi rozkazem, zamykám
« 1 2
Toto téma je uzamčeno. Odpověď nelze zaslat.

0