Autor Zpráva
svast
Profil
Zdravím, nedávno jsem tu řešil problém s vypočtením průměru ze dvou sloupců tabulky. Potřeboval bych ale do tohoto průměru ještě započítat číslo(čísla) z jiné tabulky. Zkouším je různě spojovat podle některých místních návodů, ale hlásí to chybu
mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource...

1.Poradíte jak správně spojit tyhle dva dotazy?
$prumer = MySQL_Fetch_assoc(MySQL_Query("SELECT cislo,round(avg(hodnoceni),1) as hodnoceni 
FROM tabulka WHERE cislo = '" . $podminka["cislo"] . "' GROUP BY cislo"));

$prumer2 = MySQL_Fetch_assoc(MySQL_Query("SELECT cislo,round(avg(hodnoceni),1) as hodnoceni 
FROM tabulka2 WHERE cislo = '" . $podminka["cislo"] . "' GROUP BY cislo"));

Zkoušel jsem:
$prumer = MySQL_Fetch_assoc(MySQL_Query("SELECT cislo,round(avg(hodnoceni),1) as hodnoceni 
FROM tabulka JOIN tabulka2 ON tabulka.cislo = tabulka2.cislo  
WHERE tabulka.cislo = '" . $podminka["cislo"] . "' GROUP BY cislo"));
ale nefunguje.

2.Jestli bych mohl rovnou ještě jeden dotaz. Jak se dá vypsat z tabulky jen část záznamu, když mám například "slovo[poznámka]" a chci vypsat jen "slovo".
Díky
Keeehi
Profil
1. Pokud jsou v obou tabulkách sloupce cislo a hodnoceni, tak se mysql může zlobit kvůli tomu, že je od sebe nerozezná. Ovšem co se doopravdy stalo za chybu nejlépe zjistíš, když za ten dotaz umístíš
echo mysql_error();

2. To je špatně navržená tabulka. Slovo a poznámka by měly být 2 sloupce
svast
Profil
Nerozezná, hlásí
Column 'cislo' in field list is ambiguous
zkoušel jsem tedy přesně pojmenovat všechny sloupce, ale bylo to ještě horší, celé se to seklo. Jde o tu část, kde se sčítá průměr z vybraných řádků dvou sloupců ze dvou tabulek.

2. Ale nějakým způsobem to omezit jde, ne?
Tori
Profil
svast:
V části FROM dáváte k názvům všech sloupců i název tabulky. Když totéž uděláte všude, bude MySQL spokojená.
svast
Profil
Nechápu přesně jak to myslíte, tedy jak to konkrétně napsat, abych dostal průměr ze dvou tabulek?
SELECT cislo,round(avg(hodnoceni),1)
Tori
Profil
SELECT tabulka.cislo,round(avg(tabulka.hodnoceni),1)
- anebo tabulka2, nevím, odkud se to bere.
svast
Profil
:-) Tak tohle jsem samozřejmě pochopil, jen mluvím o dvou tabulkách, tedy:
SELECT tabulka.cislo,round(avg(tabulka.hodnoceni),1)

SELECT tabulka2.cislo,round(avg(tabulka2.hodnoceni),1)

Jak tyhle dva dotazy napsat do jednoho, něco jako:
SELECT tabulka.cislo,round(avg(tabulka.hodnoceni),1),tabulka2.cislo,round(avg(tabulka2.hodnoceni),1)
což je ale nesmysl.
Abych to objasnil, k jednomu článku jdou přidat dva druhy komentářů, delší (tabulka) a kratší (tabulka2), id (cislo) článku je tedy stejné, jen potřebuji spočítat průměr ze dvou skupin hodnocení.
svast
Profil
Nakonec jsem to udělal jinak, jen by mě zajímalo jestli to není zbytečně složité, dík.
$soucet=mysql_result(MySQL_Query("SELECT sum(hodnoceni) from tabulka WHERE cislo= '".$podminka."'"),0);
$soucet2=mysql_result(MySQL_Query("SELECT sum(hodnoceni) from tabulka2 WHERE cislo= '".$podminka."'"),0);
$pocet=mysql_result(MySQL_Query("SELECT COUNT(*) as hodnoceni from tabulka WHERE cislo = '".$podminka."'"),0);
$pocet2=mysql_result(MySQL_Query("SELECT COUNT(*) as hodnoceni from tabulka2 WHERE cislo = '".$podminka."'"),0);
$soucet12=$soucet+$soucet2;
$pocet12=$pocet+$pocet2;
$prumer=round($soucet12/$pocet12,1);
pcmanik
Profil
svast:
SELECT COUNT(*) as hodnoceni, sum(hodnoceni) from tabulka WHERE cislo = '".$podminka."'
SELECT COUNT(*) as hodnoceni, sum(hodnoceni) from tabulka2 WHERE cislo = '".$podminka."'


A hned mas o 2 dotazy menej.
okolojdouci
Profil *
pcmanik:
A o diskrétně pomlčenou režii na straně php viacej. Nebo umíš v php dostat ty dvě hodnoty do proměnných na jednom řádku?
pcmanik
Profil
okolojdouci:
PHP to urcite spracuje skor, ako keby bolo treba posielat 4 dotazy na db a nasledne ich este spracovavat. A ano da sa to na jednom riadku, staci pouzi mysql_fetch_array() alebo nieco podobne.
okolojdouci
Profil *
pcmanik:
Bylo by to efektnější, kdybys tu svou verzi vypsal celou.
Jinak: tou režií jsem nemyslel čas, ale množství a potažmo přehlednost kódu. Časem a počtem dotazů myslím nemá smysl se zabývat, pokud ty 2 nebo 4 dotazy nebudou v nějakém cyklu.
pcmanik
Profil
okolojdouci
Cim viac uzivatelov, tym to bude horsie, samozrejme ze pri 10 to vadit nebude, ale na takej 100 uz urcite uvidis rozdiely.
svast
Profil
pcmanik:
popravdě si nejsem jistý jak z Tvého příkladu dostat průměr, ale každopádně dík, šlo mi spíše právě o to jestli to nebude zbytečně složité na zpracování.
pcmanik
Profil
svast:
Na priemer sa da pouzit vstavana funkcia AVG ktora je uz v mysql, a ak ti ide o to ze nevies dostat z tych mojich dotazov sum, tak si ich prirad pomocou as k inemu slovu.
okolojdouci
Profil *
svast:
Nebo použij AVG a UNION těch dvou tabulek.
svast
Profil
pcmanik, okolojdouci
dík za rady, avg jsem už zkoušel ale nešlo mi to, protože jsem měl chybu jinde. Funguje

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