Autor | Zpráva | ||
---|---|---|---|
svast Profil |
#1 · Zasláno: 10. 4. 2011, 11:14:54
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")); 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 |
#2 · Zasláno: 10. 4. 2011, 11:28:24 · Upravil/a: Keeehi
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 |
#3 · Zasláno: 10. 4. 2011, 14:49:41
Nerozezná, hlásí
Column 'cislo' in field list is ambiguous 2. Ale nějakým způsobem to omezit jde, ne? |
||
Tori Profil |
#4 · Zasláno: 10. 4. 2011, 14:53:20
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 |
#5 · Zasláno: 10. 4. 2011, 15:13:48
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 |
#6 · Zasláno: 10. 4. 2011, 15:23:35
SELECT tabulka.cislo,round(avg(tabulka.hodnoceni),1) |
||
svast Profil |
#7 · Zasláno: 10. 4. 2011, 15:42:39
:-) 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) 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 |
#8 · Zasláno: 10. 4. 2011, 21:57:18
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 |
#9 · Zasláno: 10. 4. 2011, 22:06:42 · Upravil/a: pcmanik
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 * |
#10 · Zasláno: 10. 4. 2011, 22:09:43
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 |
#11 · Zasláno: 10. 4. 2011, 22:12:07 · Upravil/a: pcmanik
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 * |
#12 · Zasláno: 10. 4. 2011, 22:22:14
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 |
#13 · Zasláno: 11. 4. 2011, 15:47:45
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 |
#14 · Zasláno: 11. 4. 2011, 23:00:34
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 |
#15 · Zasláno: 11. 4. 2011, 23:10:17
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 * |
#16 · Zasláno: 11. 4. 2011, 23:35:36
svast:
Nebo použij AVG a UNION těch dvou tabulek. |
||
svast Profil |
#17 · Zasláno: 12. 4. 2011, 20:57:05
pcmanik, okolojdouci
dík za rady, avg jsem už zkoušel ale nešlo mi to, protože jsem měl chybu jinde. Funguje |
||
Časová prodleva: 13 let
|
0