Autor Zpráva
mackopu
Profil
Z databáze vybírám rodná čísla a pomocí vlastní fce zjišťuji aktuální věk registrovaných. Věky pak ukládám do pole veky, ze kterého následně pomocí fce max() zjistím ten nejvyšší.
$dotaz = mysql_query("SELECT rodne_cislo FROM registrace'");

while ($zaznam = mysql_fetch_array($dotaz)) {
$rodne_cislo = $zaznam["rodne_cislo"];
$veky[] = UrciVek($rodne_cislo); // funkce výpočtu věku
}
$nejstarsi = max($veky);
echo "Nejstarší - ".Round($nejstarsi, 2)." let";

Potřeboval bych ale k onomu nejvyššímu věku přiřadit i rodné číslo, ze kterého se věk vypočetl. (Pak např. mohu z databáze zjistit jméno a příjmení nejstaršího registrovaného.) Napadlo mě, že by to šlo provést přiřazováním hodnot (věků) klíčům (rodným číslům). Výstup by tedy mohl vypadat následovně:
$nejstarsi = max($veky);

echo "Nejstarší - ".$nejstarsi[key].", ".Round($nejstarsi, 2)." let";

Netuším jak na to; poradíte?
gaminn
Profil *

$dotaz = mysql_query("SELECT rodne_cislo FROM registrace'");
while ($zaznam = mysql_fetch_array($dotaz)) {
$veky[] = UrciVek($zaznam["rodne_cislo"]);
$rodnaCisla[] = $zaznam["rodne_cislo"];
}

$nejstarsiVek = max($veky);
$nejstarsiRC = $rodnaCisla[array_search($nejstarsiVek)]



Snad tam nemám nikde chybu. A připomínám, že pole s věky a pole s rodnými čísly musí být číslovány stejně.
gaminn
Profil *
$nejstarsiRC = $rodnaCisla[array_search($nejstarsiVek, $veky)];
malek
Profil
Potřeboval bych ale k onomu nejvyššímu věku přiřadit i rodné číslo,

nerozumiem, ved stoho rodneho cisla si to vypocital, kam ho chces priradit? $zaznam["rodne_cislo"] a $zaznam["vek"] a co stym chces? :D
mackopu
Profil
gaminn - To je přesně ono! A jde tak zjistit i nejmladší pomocí fce min(). Díky moc!
taui
Profil *
a co takhle pouzit dotaz podobny tomuto, pokud to mas v jedne tabulce tak: SELECT rodne_cislo,vek FROM registrace WHERE MAX(vek)
pokud mas vek v jine tabulce tak treba:SELECT a.rodne_cislo,b.vek FROM registrace AS a, uzivatel AS b WHERE b.rodne_cislo=a.rodne_cislo AND MAX(b.vek);
preber si to :D
mackopu
Profil
taui - Věky v tabulce nejsou. Musejí se pomocí spešl funkce UrciVek() vypočítat pro každý řádek zvlášť. A o to právě šlo. Dalo by se to samozřejmě řešit dočasnou tabulkou např. vypoctene_veky, do které by se zapsala rodná čísla a věk a následně použít tvůj dotaz, ale pomocí pole mi to přijde přímočařejší.
rabbit
Profil
gaminnovo řešení je po technické stránce určitě správné, osobně bych to ale řešil jedním asociativním polem (r. č. jako klíč, věk jako hodnota):
while ($zaznam = mysql_fetch_array($dotaz)) {

$veky[$zaznam["rodne_cislo"]] = UrciVek($zaznam["rodne_cislo"]) ;
}

max($veky) ; // věk nejstaršího

array_keys($veky, max($veky)) ; // pole r. č. s nejvyšším věkem (může být více nejstarších!!!)

Nevýhodou dvou nezávislých polí je, že po x-té úpravě x-set řádkového skriptu můžete někde v jeho průběhu zapomenout úpravu jednoho z nich (např. funkcí array_shift). Chyby se pak špatně hledají.
gaminn
Profil *
rabbit
Jj, tohle je lepší;)
tiso
Profil
mackopu
To je problém vypočítať ten vek až z vybratej hodnoty? Formát rodného čísla je totiž taký že usporiadanie podľa čísla zostupne dáva rovno najstaršieho človeka navrch, problém je len so zoradením muži/ženy, treba ich brať zvlášť...
mackopu
Profil
tiso
Zajímavé... To by stálo za pokus
zivan
Profil
Jasne rodna cisla jsou uz samy o sobe srovnatelna podle veku, pokud se hleda nejvetsi nebo nejmensi, tak bych upravil SELECT tak, abych dostal rovnou vysledek. Bude to vzdy rychlejsi nez vzit pole a to potom prochazet.

Problem s pohlavim jde jednoduse vyresit podminkou LIKE. Napr. pro vyber pouze zenskych RC staci zadat SELECT rocne_cislo FROM registrace WHERE rodne_cislo LIKE '__5%' OR '__6%' . Nejsem si uplne jist syntaxi, ale myslenka je snad jasna.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0