Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Takže jsem něčeho dosáhl. Žádné while, ale nadefinovat proměnnou. Jen nevím, proč je všude celé čísl…
Kráťa 17.09.2012 03:23
Kráťa
ten round by som nedaval do PHP, ale do SQL: Select kraj, Sum(cs) as SumCS, ROUND(AVG(cs), 1) as Pr…
wam_Spider007 17.09.2012 08:06
wam_Spider007
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 s…
Kráťa 17.09.2012 10:48
Kráťa
Napadlo me v te souvislosti, jestli nemam blbe typ sloupce (mam varchar), jestli nema byt jiný (zkus…
ERASER 17.09.2012 12:52
ERASER
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…
wam_Spider007 17.09.2012 13:07
wam_Spider007
To jsem z toho jelen. Já dal všem INT a nic. Furt celá čísla.
Kráťa 17.09.2012 14:41
Kráťa
a ten round robis priamo v tom SQL prikaze ako som to napisal? ak ano tak je to divne ... Ak tak sku…
wam_Spider007 17.09.2012 16:57
wam_Spider007
Teď dám obrázky, aby byla změna :-) [http://pc.poradna.net/file/view/10892-kod-gif] [http://pc.por…
Kráťa 17.09.2012 18:07
Kráťa
ok, a ked len cisto v MySQL spustis ten SELECT, ktory je v PHP, tak ake hodnoty to vyhodi? Ak to vyh…
wam_Spider007 17.09.2012 19:34
wam_Spider007
Select přímo v phpmyadmin vyhodí tohle [77select_vysledky_tn.jpg] Koukám, že to snad ani nesčítá,…
Kráťa 17.09.2012 22:12
Kráťa
Export té tabulky, kdyby se tím někdo chtěl zabývat -- phpMyAdmin SQL Dump -- version 2.10.0.2 -- h…
Kráťa 17.09.2012 22:27
Kráťa
ach jaj my sme ale krepi :-D no necudo, ze to dava cele cisla, ked to grupujeme za kraj a ty mas v… nový
wam_Spider007 17.09.2012 22:54
wam_Spider007
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… poslední
Kráťa 17.09.2012 23:21
Kráťa

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

<!--vse-->
<table border="2" cellpadding="6" cellspacing="0" frame="vsides" 
rules="rows" style="border: 2px solid maroon">
<?php
$vysledekvse = mysql_query( 
"Select kraj, 
Sum(cs) as SumCS, AVG(cs) as PrumCS, 
Sum(era) as SumERA, AVG(era) as PrumERA, 
Sum(kb) as SumKB, AVG(kb) as PrumKB,
Sum(ge) as SumGE, AVG(ge) as PrumGE,
Sum(ra) as SumRA, AVG(ra) as PrumRA,
Sum(uc) as SumUC, AVG(uc) as PrumUC 
  from banky_bezbarierovost
  group by kraj
  order by kraj"
);

$zaznam = mysql_fetch_array ($vysledekvse); ?>

<tr>
<td><strong>Česká spořitelna a. s.</strong></td>
<td style="text-align: center"><?php echo round($zaznam['PrumCS'],1); ?></td>
</tr>
...

ten round by som nedaval do PHP, ale do SQL:

Select kraj, 
Sum(cs) as SumCS, ROUND(AVG(cs), 1) as PrumCS, 
Sum(era) as SumERA, ROUND(AVG(era), 1) as PrumERA, 
Sum(kb) as SumKB, ROUND(AVG(kb), 1) as PrumKB,
Sum(ge) as SumGE, ROUND(AVG(ge), 1) as PrumGE,
Sum(ra) as SumRA, ROUND(AVG(ra), 1) as PrumRA,
Sum(uc) as SumUC, ROUND(AVG(uc), 1) as PrumUC 
  from banky_bezbarierovost
  group by kraj
  order by kraj

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.

Napadlo me v te souvislosti, jestli nemam blbe typ sloupce (mam varchar), jestli nema byt jiný (zkusím dát TINYINT). Doma vyzkousim.

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).

Export té tabulky, kdyby se tím někdo chtěl zabývat

-- phpMyAdmin SQL Dump
-- version 2.10.0.2
-- http://www.phpmyadmin.net
-- 
-- Počítač: localhost
-- Vygenerováno: Pondělí 17. září 2012, 22:24
-- Verze MySQL: 5.0.89
-- Verze PHP: 5.2.10

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

-- 
-- Databáze: `258468542db`
-- 

-- --------------------------------------------------------

-- 
-- Struktura tabulky `banky_bezbarierovost`
-- 

CREATE TABLE `banky_bezbarierovost` (
  `kraj` text character set cp1250 collate cp1250_czech_cs NOT NULL,
  `cs` decimal(2,1) NOT NULL,
  `era` decimal(2,1) NOT NULL,
  `ge` decimal(2,1) NOT NULL,
  `kb` decimal(2,1) NOT NULL,
  `ra` decimal(2,1) NOT NULL,
  `uc` decimal(2,1) NOT NULL,
  `klady` text character set cp1250 collate cp1250_czech_cs NOT NULL,
  `zapory` text character set cp1250 collate cp1250_czech_cs NOT NULL,
  `poznamka` text character set cp1250 collate cp1250_czech_cs NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin2 COLLATE=latin2_czech_cs;

-- 
-- Vypisuji data pro tabulku `banky_bezbarierovost`
-- 

INSERT INTO `banky_bezbarierovost` (`kraj`, `cs`, `era`, `ge`, `kb`, `ra`, `uc`, `klady`, `zapory`, `poznamka`) VALUES 
('Praha', 2.0, 1.0, 3.0, 5.0, 4.0, 4.0, 'Jednoznačně Era poštovní spořitelna, kde mají on-line přepis (eScribe) a pokud jej na pobočce nemají, velmi ochotné píší na monitoru.', 'Na žádost o napsání sdělení odpověděla klientská pracovnice v Komerční bance, že nemá čas.', 'Často nechybí vstřícnost, ale chybí znalost komunikace s osobou s postižením sluchu.'),
('Středočeský kraj', 3.0, 1.0, 4.0, 4.0, 3.0, 3.0, 'Bezproblémová a plnohodnotná komunikace v Era poštovní spořitelně', 'Psaní na malé papírky (ve dvou pobočkách  dokonce na jeden za celou dobu).', 'Psát na monitor, nebo alespoň na papír A4.'),
('Ústecký kraj', 2.0, 1.0, 5.0, 3.0, 3.0, 2.0, 'Ochota klientského pracovníka v UniCredit Bank Czech Republic a. s.', 'Odmítnutí napsat informaci v GE Money Bank a. s. a to dokonce po několikerém zopakování.', 'Chtělo by to nějaké školení pracovníků, jak komunikovat.'),
('Liberecký kraj', 2.0, 1.0, 2.0, 3.0, 3.0, 2.0, 'Potěšila mne nejvíce ERA poštovní spořitelna.\r<br>Dostala jsem se tam až v 16.55, na dveřích měli cedulku s otvírací dobou a bylo tam napsáno, že zavírají v 17:00. Ale přesto mě bez řečí hned vzali a věnovali se mi. Když jsem řekla, že neslyším, a zda by paní mohla použít užít eScribe, bez řečí je použila a bylo to skvělé. Úřednice se mi věnovala až do 17:15 a nikdo neremcal, že už mají zavřeno. Klobouk dolů! \r<br>I v ostatních bankách byli vstřícní a ochotně natočili monitor, na který mi po mé žádosti psali odpovědi, ale nejlepší byla ta ERA. ', 'Žádná nebyla hrozná. Akorát jsem musela v Komerční bance tu úřednici nějakou dobu přesvědčovat, aby mi nepsala na papír (na čemž ona zpočátku opakovaně trvala), nýbrž že chci, aby ke mně natočila monitor a psala mi. Po chvíli ale souhlasila a už to šlo dobře, také mi ukázala, jak funguje internetbanking na jejich webové stránce. ', 'Zavést možnost eScribe ve všech bankách.');

ach jaj my sme ale krepi :-D

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:

SELECT AVG(CS) AS PrumCS, AVG(era) AS PrumERA, ... FROM banky_bezbarierovost;

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

<?php
$vysledekvse = mysql_query( 
"SELECT ROUND(AVG(CS), 1) as PrumCS, 
ROUND(AVG(era), 1) as PrumERA, 
ROUND(AVG(kb), 1) as PrumKB,
ROUND(AVG(ge), 1) as PrumGE,
ROUND(AVG(ra), 1) as PrumRA,
ROUND(AVG(uc), 1) as PrumUC
FROM banky_bezbarierovost"
);


$zaznam = mysql_fetch_array ($vysledekvse); ?>

<tr>
<td><strong>Česká spořitelna a. s.</strong></td>
<td style="text-align: center"><?php echo $zaznam['PrumCS']; ?></td>

vypis.php

Zpět do poradny Odpovědět na původní otázku Nahoru