Neumím dotaz do databáze MySQL
Ahoj,
potřeboval bych pomoc s dotazem/výpisem.
V databázi je tabulka, která má sloupce kraj, cs, era, kb, ge, ra, uc. Jde o hodnocení bankovních poboček z pohledu osob se sluchovým postižením. Hodnotilo se v každém kraji 6 bank.
Rozepsat to po jednotlivých krajích snad zvládnu, ale neumím udělat "vše". Známkuje se jako ve škole a chtěl bych tabulku, kde by byl průměr známek ze všech krajů. Zatím jsem sesmolil
<!--vse-->
<table border="2" cellpadding="6" cellspacing="0" frame="vsides" rules="rows" style="border: 2px solid maroon">
<?php
$vysledekvse = mysql_query(
"SELECT * FROM banky_bezbarierovost
);
//) or die(mysql_error());
/* Konec přímé práce s databází. */
?>
<br><br>
<tr>
<td><strong>Česká spořitelna a. s.</strong></td>
<td style="text-align: center"><?php echo $zaznam["cs"]; ?></td>
</tr>
</table>
<?php endwhile ?>
<!--/vse-->
Neumím to jednak nijak sečíst a vydělit 14 (14 krajů), druhak mi to vypisuje chybu špatná syntaxe i u tohoto obyč. výpisu (<?php echo $zaznam["cs"]; ?>) s jedním záznamem v tabulce.
Já jsem děsná trubka. Spatlal jsem to takto
A vypisuje se pouze "Parse error: syntax error, unexpected T_STRING in /domains1/lt622300/public/www/banka-bez-barier/vyp is.php on line 22" To je tento řádek
<td style="text-align: center"><?php echo $zaznam["cs"]; ?></td>
Napište mi to někdo prosím celé dobře. Nemám dnes vůbec čas se to učit, zítra to potřebuji mít rozchozené, aby mi testeři vyplnili kraje a za chvilku jedu pryč a u stroje budu až večer. Dík 296x.
v tom selecte su stale zle uvodzovky. maju byt az za order by kraj.
za AVG(uc) as PrumUC uz ciarka nema byt, kedze za nim uz ide prikaz from
takze aj ked uz zvysok PHP moze byt ok, tak prikaz SQL ma zlu syntax.
Díky moc, ještě mám dvacet minut, tak jsem to zkusil. Stránka se alespoň už načetla, ale ukazuje chybu
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /domains1/lt622300/public/www/banka-bez-barier/vyp is.php on line 26
na tom řádku je
while ($zaznam = mysql_fetch_array ($vysledekvse)):
$vysledekvse asi obsahuje hlášení o mysql chybě ( třeba neexistující sloupec apod.)
Hlášení vypíšeš třeba takto :
Napadlo me v te souvislosti, jestli nemam blbe typ sloupce (mam varchar), jestli nema byt jiný (zkusím dát TINYINT). Doma vyzkousim.
S tím výpisem chyby databáze napíše
Parse error: syntax error, unexpected T_ECHO in /domains1/lt622300/public/www/banka-bez-barier/vyp is.php on line 45
a na řádku 45 je právě ono
) or echo mysql_error ();
Ani se nenačte html. Jen bílá stránka s tou chybou.
A když jsem to "or" teď vyndal a doplnil tabulku i o dalších 5 bank a vložil do databáze údaje za 3 kraje, "aby byl matroš", tak mi to vypsalo chybu:
"Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /domains1/lt622300/public/www/banka-bez-barier/vyp is.php on line 49"
na řádku 49 je
while ($zaznam = mysql_fetch_array ($vysledekvse)): ?>
nerad sa opakujem, ale za PrumUC je ciarka navyse - uz som to pisal vyssie. Ale ked niekto cita selektivne, tak je to marne.
Jsem koukal a udělal to od Hynaise a na tebe zapomněl. V tom je můj největší problém. Kopíruji řádky a jedna čárka...
Už se mi načte HTML. Nenačtou se však žádná čísla (ty průměry známek) a udělají se mi tři tabulky místo jedné (v db jsou 3 řádky).
vypis.php
Díky za opakování.
<table> jsem dal před select a už je jen jedna tabulka. Avšak místo známek se vypíšou další řádky tabulky.
ten select ked pustis v mysql, tak co to vypluje?
Nie som si teraz isty, ale ak je v nejakom riadku daneho stlpca hodnota NULL a urobis nad nim AVG alebo SUM, tak vysledok je NULL. Takze tie AVG bude este treba osetrit AVG(COALESCE(nazov_stlpca, 0)).
a len tak btw: co je tam ta dvojbodka v prikaze
aha uz viem v com je problem:
nedavaj echo $zaznam['cs']; ale echo $zaznam['PrumCS']; atd. lebo tie polia sa premenovali tym AVG(cs) AS PrumCS
Jsem to předělal, když jsem vyndal dvojtečku, udělala se chyba.
U Raifeisen to dělá tu nulu, jak jsi psal, protože to jedna testerka ještě nemá a nevyplnila to. Dám tam asi zatím "růčo" trojku, aby něco bylo.
Jak se ty průměry oříznou, aby bylo pouze jedno desetinné číslo?
A furt se mi vypisují pod tabulkou řádky
vypis.php
1. no zrejme je dvojbodka zaciatok cyklu a ten endwhile koniec. ja osobne preferuje pouzitie zatvoriek {}
2. ok, da sa to aj tak poriasit, fixnou hodnotou
3. orezanie desatinnych ciarok treba spravit zaokruhlovanim. V SQL na to sluzi funkcia Round. Jej pouzitie je Round(hodnota, pocet_miest)
4. To vypisovanie riadkov je preto, lebo select vrati niekolko riadkov znamok, kedze je viacero krajov. Takze pre kazdy kraj sa vypisu hodnoty v urcenom tvare.
Já to právě chci v jedné tabulce průměry ze všech krajů
Nakonec to úplně vyhodím, nechám jen kraje a bude to.
"A jak řekl, tak udělal." Vyhodil ten celostátní průměr a dá se na to i koukat. Až mi půjde udělat, tak ho tam dám
vypis.php
Takže jsem něčeho dosáhl. Žádné while, ale nadefinovat proměnnou. Jen nevím, proč je všude celé číslo, když to mám na jedno desetinné. Ale ono už je celé číslo v tom výsledku s nulami. Přijde mi to, že už je výsledek zaokrouhlen, jelikož CS má součet u čtyř řádků 9 a to by mělo být 2,2 a je tam 2.
dole vypis.php
ten round by som nedaval do PHP, ale do SQL:
inak co sa ma dosiahnut tymi SUM(cs), SUM(era)? Pretoze to len scita vsetky znamky dokopy. Ak mas 3 riadky s hodnotami 3, 5, 1 tak vysledok bude 9. Predpokladam, ze tam malo ist COUNT - pocet riadkov/znamok.
Jo, mám to jak jsem chtěl. Moc ti děkuji. Že to nepočítá na jedno desetinné místo ani když to je v selectu rozdejchám.
V noci mě napadlo, udělat si proměnné, vydělit součet ve sloupci počtem řádků v tabulce mysql a ve výpisu dávat echo s výsledky (ale nějaké složité).
Jaké datové typy mají dané údaje?
mysql
Podle mě by to měl být typ "4.3. Čísla s pohyblivou desetinou čárkou", například "FLOAT".
Podle mě když jsou v celočíselném tvaru a následně je s nimi provedena nějaká matematická operace, tak výsledek může být zase ve stejném tvaru (celočíselném).
Ja myslel, ze TINYINT je take ciselny udaj. Od snad -128 do +128. Z formulare do db se odesilaji znamky "jako ve skole". Doma ten FLOAT zkusim. Ja uz ho i zkousel, ale byla tam jina chyba (where), a pak uz jsem to nezkusil.
wam_Spider007 má pravdu, teď jsem to také vyzkoušel, takže doma to zkoušet ani nemusíš. Takže Nevím proč ti to nepočítá správně . Na tom webu taky asi nemáš zobrazeny všechny kraje, jelikož jsem počítal Ge a vyšlo mi 14/4=3,5 (suma/pocet_kraju) a na webu mas "2.0". Jinak TINYINT je také číselný údaj od -128 do +127, bez znaménka (UNSIGNED) 0 až 255, ale vždy celočíselný. Vycházel jsem na základě zkušností z jiných programovacích jazyků.
Kraje tam všechny nejsou, jsou tam zatím jen 4. Testeři to musí vyplnit aby to bylo v db. Jsou však líní. Navíc jsem to dodělal dnes v noci a výzva k vyplnění jim přišla až dnes.
ja som to skusal a dal som AVG funkciu na pole typu INT a z cisel 2 a 3 mi vyplulo 2.500 takze je to ok.
Inak datovemu typu float by som sa radsej v databazach vyhol. Namiesto toho radsej DECIMAL.
To jsem z toho jelen. Já dal všem INT a nic. Furt celá čísla.
a ten round robis priamo v tom SQL prikaze ako som to napisal? ak ano tak je to divne ...
Ak tak skus urobit tie polia z INT na DECIMAL(2,1). Ako som pisal, zmenilo by to typ pola na take, kde pojde vlozit len cisla od 0.0 do 9.9
Teď dám obrázky, aby byla změna
Záhada. Koukám, že jsou i blbě. Např Ge Money je průměr 3,7, ale na výstupu je 2.0
ok, a ked len cisto v MySQL spustis ten SELECT, ktory je v PHP, tak ake hodnoty to vyhodi?
Ak to vyhodi spravne, tak bude chyba niekde v PHP.
Select přímo v phpmyadmin vyhodí tohle
Koukám, že to snad ani nesčítá, ale vyhazuje pro každý kraj zvlášť. Očekával jsem, že vypadne 6 čísel pro sum a 6 pro průměr.
Export té tabulky, kdyby se tím někdo chtěl zabývat
ach jaj my sme ale krepi
no necudo, ze to dava cele cisla, ked to grupujeme za kraj a ty mas v kazdom kraji len jeden riadok. Takze to urobi priemer vzdy za jeden kraj.
To, ze je celkovy priemer za CS 2,25 je sice pekne, ale toto dostaneme len ak spravime priemer za vsetky kraje (2+2+2+3)/4. My ale robime priemer pre kazdy kraj zvlast. Cize musel by si mat viacero riadkov pre Prahu, viacero pre Stredocesky kraj etc.
Takze asi bude treba urobit select:
Jo, z tohoto už lezou průměry jak jsem to původně chtěl.
Děkuji ti za pomoc, já bych se s tím mořil měsíc. Značím za vyřešené.
Až někdo nude chtít průměry ze sloupců, b udeme ho sem odkazovat. Konečný select + to další je takto
vypis.php
Včera mě také napadlo, udělat si $delitel z počtu řádků v tabulce asi nějak
$delitel = mysql_result(mysql_query("SELECT COUNT(*) FROM banky_bezbarierovost"), 0);
Pak select na sloupec, sečíst ta čísla (nevím jak) a vydělit tou proměnnou. Ale bylo toho všeho nějak moc oproti tomuto selectu.