Autor | Zpráva | ||
---|---|---|---|
Adam1999 Profil |
#1 · Zasláno: 20. 5. 2015, 18:36:51
Dobrý den,
Potřebuji z databáze vyčíst známky a nějak je zprůměrovat. V databázi jsou uloženy takto: ![]() To znamená že potřebuji vytáhnou všechny "reviews" a udělat z nic průměr. K čtení z databáze používám následovné: <?php $result = dibi::query('SELECT * FROM [reviews] WHERE [user_id] = %s, "11"); if ($all = $result->fetchAll()) foreach($all as $row) { echo $row->reviews; } ?> Prosím budu rád za každou pomoc :), Děkuji. |
||
lionel messi Profil |
#2 · Zasláno: 20. 5. 2015, 18:42:53
Adam1999:
Mohla by ti pomôcť agregačná funkcia AVG(). |
||
Adam1999 Profil |
#3 · Zasláno: 20. 5. 2015, 18:46:15
Zkusím to ale nevím jak se s tou funkcí zachází rovnou mi vypíše průměr?
|
||
lionel messi Profil |
#4 · Zasláno: 20. 5. 2015, 18:53:31
Adam1999:
„ale nevím jak se s tou funkcí zachází rovnou mi vypíše průměr?“ Presne tak, funkcia vráti priemer svojho argumentu (bližší popis nájdeš po kliknutí na odkaz v [#2]). |
||
Adam1999 Profil |
#5 · Zasláno: 20. 5. 2015, 22:21:46
Dotaz jsem upravil takto
<?php $result_r = dibi::query('SELECT AVG(reviews) AS "AverageReviews" FROM [users_reviews] WHERE [id] = %s', "11"); if ($all_r = $result_r->fetchAll()) foreach($all_r as $row_r) { $row_r->AverageReviews; } ?> Děkuji. |
||
tiso Profil |
#6 · Zasláno: 21. 5. 2015, 00:25:41
pre začiatok:
[id_user]
|
||
juriad Profil |
#7 · Zasláno: 21. 5. 2015, 08:05:40
|
||
Alphard Profil |
#8 · Zasláno: 21. 5. 2015, 10:33:31
juriad:
„Neznám syntaxi dibi, ale myslím, že alias v uvozovkách ti na MySQL neprojde“ V MySQL projde skoro cokoliv, i ty uvozovky :-) A pokud jde o dibi, identifikátory patří do hranatých závorek, nebo zpětných uvozovek, pak jsou nahrazovány podle konkrétní databáze. |
||
Adam1999 Profil |
#9 · Zasláno: 21. 5. 2015, 16:39:33
Upravil jsem to teda takto podle rad:
<?php $result_r = dibi::query('SELECT AVG(reviews) AS [AverageReviews] FROM [users_reviews] WHERE [id_user] = %s', "11"); if ($all_r = $result_r->fetchAll()) foreach($all_r as $row_r) { $row_r->AverageReviews; } ?> |
||
aDAm Profil |
a konkrétnější být nemůžeš?
PS: sic nejsem expert přes DB ale neměla by se u agregační funkce definovat i agregace? mysql> SELECT student_name, AVG(test_score) -> FROM student -> GROUP BY student_name; |
||
Adam1999 Profil |
#11 · Zasláno: 21. 5. 2015, 16:54:40
Ale já od sud nechci vyčíst "student_name" ale pouze ten průměr
|
||
aDAm Profil |
#12 · Zasláno: 22. 5. 2015, 08:03:47
acho bože, to co sem tu vložil je z příkladu z uvedeného linku....Vidíš tam to GROUP BY ? To je to co ti tam chybí. Jinak pro tvou podmínku že to má být user s id 11 ti to vrátí jen jeden záznam takže to fetchAll je zbytečné a místo něj je vhodné něco jako fetchOne či tak nějak a pak samo je zbytečný i ten cyklus.
|
||
Kajman Profil |
aDAm:
Pokud se v select části uvádí jen agregační funkce a žádné sloupce, je dotaz v pořádku i bez group by klauzule a udělá se např. ten průměr pro všechny vyhovující řádky. Adam1999: Nechybí tam jenom echo na pátém řádku? |
||
aDAm Profil |
#14 · Zasláno: 22. 5. 2015, 12:26:55
No proto jsem uvedl ať je s popisem chyby trošku více sdílnější, ono je fajn říct "Nefunguje to"....na to pak lze odpovědět "Tak to máš rozbitý" ;)
|
||
adam1999 Profil * |
#15 · Zasláno: 22. 5. 2015, 16:13:14
Kajman:
Děkuji už to funguje :) Moje chyba to echo mi úplně vypadlo. aDAm: Děkuji že se srazíš pomoc ale pokud chceš být takto nepříjemný tak radši nepomáhej ušetří ti to nervy :). |
||
Časová prodleva: 10 let
|
0