Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Výpočet procent v PHP

Ukládám výsledky testu a ty potom vypisuji

$vse = mysql_query("SELECT * FROM test_iq");
echo "Test byl vyplněn celkem: " . mysql_num_rows($vse) . "x\n";
while ($row = mysql_fetch_assoc($vse)) {
    // zpracování tabulky
}
mysql_free_result($vse);

echo "<br><br>";

$dobre = mysql_query("SELECT * FROM test_iq WHERE jjj like 'zaj%'") or die(mysql_error());
echo "Z toho správně pouze: " . mysql_num_rows($dobre) . "x\n";

Líbil by se mi ještě výpočet v procentech. Tak jsem přidal

$jedno = $vse / 100;
echo "jedno % = $jedno";

echo "<br><br>";

$procenta = $dobre / $jedno;
echo "To je $procenta %";

a leze mi z toho:

Test byl vyplněn celkem: 10x
Z toho správně pouze: 2x
jedno % = 0.05
To je 120 %

Z čehož jsem úplně jelen. Co dělám špatně?

Předmět Autor Datum
Ve $vse a $dobre nemáš počet odpovědí, ale výsledek dotazu do databáze. Teprve pomocí mysql_num_rows…
Wikan 06.03.2017 07:33
Wikan
Jo, už mě teď trklo, že musím udělat znovu dotaz. Teď mám $jedno = mysql_query("SELECT * FROM test_…
Kráťa 06.03.2017 07:36
Kráťa
Nový dotaz rozhodně dělat nemusíš. A pořád děláš tu samou chybu - $jedno obsahuje výsledek dotazu, n…
Wikan 06.03.2017 08:02
Wikan
Si asi sedím na vedení. Když udělám výsledek dotazu/100, tak to píše úplné nesmysly $jedno = $vse/1…
Kráťa 06.03.2017 09:05
Kráťa
Když udělám výsledek dotazu/100, tak to píše úplné nesmysly No a to je právě ta chyba. Ty nechceš u…
Wikan 06.03.2017 09:07
Wikan
Aha, to netuším jak. Můžeš dát nápovědu 50/50?
Kráťa 06.03.2017 09:21
Kráťa
Teprve pomocí mysql_num_rows() z toho výsledku získáš počet řádků. $vse = mysql_query("SELECT * FRO…
Wikan 06.03.2017 09:24
Wikan
Děkuji ti převelice za celé.
Kráťa 06.03.2017 09:47
Kráťa
ovela lepsie by bolo namiesto pouzitia mysql_num_rows urobit uz priamo v selecte spocitanie pomocou…
wam_Spider007 06.03.2017 11:59
wam_Spider007
Díky za odpověď. Ona je to pouze taková srandička ve stylu "policejní test IQ". Nic s tím dělat neho… poslední
Kráťa 06.03.2017 12:40
Kráťa

Jo, už mě teď trklo, že musím udělat znovu dotaz. Teď mám

$jedno = mysql_query("SELECT * FROM test_iq");
echo "1 % je: " . mysql_num_rows($jedno)/100 . "x\n";
while ($row = mysql_fetch_assoc($jedno)) {
    // zpracování tabulky
}
mysql_free_result($jedno);

echo "<br><br>";

$procenta = $dobre/$jedno;
echo "To je: $procenta %";

ale leze z toho

Test byl vyplněn celkem: 10x

Z toho správně pouze: 2x

1 % je: 0.1x

To je 0.85714285714286 %

Si asi sedím na vedení. Když udělám výsledek dotazu/100, tak to píše úplné nesmysly

$jedno = $vse/100;
echo "1 % je: $jedno";

echo "<br><br>";

$procenta = $dobre/$jedno;
echo "To je: $procenta %";

vypíše

Test byl vyplněn celkem: 10x

Z toho správně pouze: 2x

1 % je: 0.05

To je: 120 %

Teprve pomocí mysql_num_rows() z toho výsledku získáš počet řádků.

$vse = mysql_query("SELECT * FROM test_iq");
$pocetVse = mysql_num_rows($vse);
echo "Test byl vyplněn celkem: " . $pocetVse . "x\n";
while ($row = mysql_fetch_assoc($vse)) {
    // zpracování tabulky
}
mysql_free_result($vse);

echo "<br><br>";

$dobre = mysql_query("SELECT * FROM test_iq WHERE jjj like 'zaj%'") or die(mysql_error());
$pocetDobre = mysql_num_rows($dobre);
echo "Z toho správně pouze: " . $pocetDobre . "x\n";

$jedno = $pocetVse / 100;
echo "jedno % = $jedno";

echo "<br><br>";

$procenta = $pocetDobre / $jedno;
echo "To je $procenta %";

ovela lepsie by bolo namiesto pouzitia mysql_num_rows urobit uz priamo v selecte spocitanie pomocou COUNT. A potom cez mysql_fetch tu hodnotu precitat ako hocijaky iny stlpec.

"SELECT COUNT(1) FROM test_iq WHERE jjj like 'zaj%'"

Lebo takto sa zbytocne selectuju data a az nasledne sa zistuje pocet riadkov.

Je to ale najmensi problem co tu vidim.
Ten kod je dlhodobo neudrzovatelny. Ziadne OOP, pouzivanie deprecated funkcii (mysql namiesto PDO/mysqli), spagety kod, divna konvencia nazvov SQL objektov.

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