Autor Zpráva
gamer
Profil *
Ahoj, mám problém.

Dělám přepočet na jednu hru, a nák mi to furt nechce fungovat jak má (už jsem zkoušel x možností a nevim jak dál)

Na mě (tj. id 1) to funguje normálně, ale dalším to už nic neudělá.
Zápis mám tu:

<?php
require "db.php";
?>

<?
$vyber = "SELECT * FROM `hrac` ORDER BY id_hrace ASC LIMIT ";
$odvyber = mysql_query( $vyber )
or die( mysql_error() );
$zasvyber = mysql_fetch_array( $odvyber );
$id_hrace = $zasvyber ['id_hrace'];
?>

<?
$sl1 = "SELECT * FROM `eko` ORDER BY $id_hrace ASC ";
$ekono1 = mysql_query( $sl1 )
or die( mysql_error() );
$eko1 = mysql_fetch_array( $ekono1 );
$pe = $eko1 ['penize'];
?>
<?php
$sloupec1 = "SELECT * FROM `lo` ORDER BY $id_hrace ASC ";
$lode1 = mysql_query( $sloupec1 )
or die( mysql_error() );
$lod1 = mysql_fetch_array( $lode1 );
$pen = $lod1['cloud']*585 + $pe;
$penize = $pen;
$doDB=mysql_query("UPDATE `eko` SET `id_hrace`= '$id_hrace',
`penize` = '$penize' WHERE `eko`.id_hrace= $id_hrace LIMIT 1 ;");
?>

<?
$sl2 = "SELECT * FROM `eko` ORDER BY id_hrace ASC ";
$ekono2 = mysql_query( $sl2 )
or die( mysql_error() );
$eko2 = mysql_fetch_array( $ekono2 );
$r = $eko2 ['rudy'];
?>
<?php
$sloupec2 = "SELECT * FROM `lo` ORDER BY id_hrace ASC ";
$lode2 = mysql_query( $sloupec2 )
or die( mysql_error() );
$lod2 = mysql_fetch_array( $lode2 );
$ru = $lod2['mining']*458 + $r;
$rudy = $ru;
$doDB=mysql_query("UPDATE `eko` SET `id_hrace`='$id_hrace',
`rudy` = '$rudy' WHERE `eko`.`id_hrace`=$id_hrace LIMIT 1 ;");
?>

<?
$sl3 = "SELECT * FROM `eko` ORDER BY id_hrace ASC ";
$ekono3 = mysql_query( $sl3 )
or die( mysql_error() );
$eko3 = mysql_fetch_array( $ekono3 );
$t = $eko3 ['tylium'];
?>
<?php
$sloupec3 = "SELECT * FROM `lo` ORDER BY id_hrace ASC ";
$lode3 = mysql_query( $sloupec3 )
or die( mysql_error() );
$lod3 = mysql_fetch_array( $lode3 );
$tyl = $lod3['rafinery']*325 + $t;
$tylium = $tyl;
$doDB=mysql_query("UPDATE `eko` SET `id_hrace`='$id_hrace',
`tylium` = '$tylium' WHERE `ekon`.`id_hrace`=$id_hrace LIMIT 1 ;");
?>

<?
$sl4 = "SELECT * FROM `eko` ORDER BY id_hrace ASC ";
$ekono4 = mysql_query( $sl4 )
or die( mysql_error() );
$eko4 = mysql_fetch_array( $ekono4 );
$po = $eko4 ['potraviny'];
?>
<?php
$sloupec4 = "SELECT * FROM `lo` ORDER BY id_hrace ASC ";
$lode4 = mysql_query( $sloupec4 )
or die( mysql_error() );
$lod4 = mysql_fetch_array( $lode4 );
$potra = $lod4['botanic']*600 + $po;
$potraviny = $potra;
$doDB=mysql_query("UPDATE `eko` SET `id_hrace`='$id_hrace',
`potraviny` = '$potraviny' WHERE `eko`.`id_hrace`=$id_hrace LIMIT 1 ;");
?>


<?
$sl5 = "SELECT * FROM `eko` ORDER BY id_hrace ASC ";
$ekono5 = mysql_query( $sl5 )
or die( mysql_error() );
$eko5 = mysql_fetch_array( $ekono5 );
$popi = $eko5 ['populace'];
?>
<?
$sloupecek = "SELECT * FROM `eko` ORDER BY id_hrace ASC ";
$popul = mysql_query( $sloupecek )
or die( mysql_error() );
$popka = mysql_fetch_array( $popul );
$populace = $popka['populace']*0.5 + $popi;
$doDB=mysql_query("UPDATE `eko` SET `id_hrace`='$id_hrace',
`populace` = '$populace' WHERE `eko`.`id_hrace`=$id_hrace LIMIT 1 ;");
?>

Děkuji za odpověď (jestli náká bude
nightfish
Profil
ufff, ufff, chudák databáze

jinak by asi bylo dobré napsat, jak se projevuje nefunkčnost
z tvého kódu je houby poznat (a něco mi říká, že byses měl podívat na nějaký návod k mysql. Zjistil bys, že existuje něco jako WHERE)
gamer
Profil *
Je to napsaný na začátku, mě (id 1) to udělá to co má (tj, vypíše hodnoty z eko a lo, z lo to vynásobý počet např. cloud * 585 a přičte hodnoty z eko a to všechno Updatuje do db), ale ostatním uživatelům už to nic neudělá.
fandaa
Profil
gamer
Jak již napsal nightfish, podívej se třeba na linuxsoft a podívej se na kapitolu kde je WHERE.
gamer
Profil *
oki, kouknu, dík
Joker
Profil
nightfish
ufff, ufff, chudák databáze
Zajímavé, přesně tohle při čtení dotazu napadlo i mě :-)
djlj
Profil
Joker
Mě napadlo: „Ty vole!“

gamer
Krom výše uvedeného taky zbytečně vybíráš všechny sloupce. Zbytečně děláš několik stejných dotazů za sebou. Možná by snad i ty UPDATy šly napsat tak, aby vůbec nebyl předchozí SELECT potřeba.
Joker
Profil
djlj
Krom výše uvedeného taky zbytečně vybíráš všechny sloupce.
Přesněji řečeno: často vybírá komplet celou tabulku kvůli jediné hodnotě, kterou ve finále vpodstatě ani nepotřebuje :-)
gamer
Profil *
Ale když jsem to měl tak, že jsem to vybíral jen jednou a i UPDATE jsem měl taky jen jeden, tak mi to nešlo vůbec... takhle to aspoň funguje na mě :-D
nightfish
Profil
jinak ještě k tomu původnímu kódu a vysvětlení, proč to nefunguje...
$vyber = "SELECT * FROM `hrac` ORDER BY id_hrace ASC LIMIT ";
1) tomu LIMITu chybí parametry, ne?
2) tenhle dotaz vybere všechny řádky i sloupce tabulky `hrac` a seřadí je podle id_hrace, vzestupně (což je výchozí hodnota, takže to ASC možno vynechat)
3) dále pak se hodnota sloupce `id_hrace` prvního řádku uloží do proměnné $id_hrace (je to vždy nejmenší hodnota `id_hrace` z tabulky `hrac`)


$sl1 = "SELECT * FROM `eko` ORDER BY $id_hrace ASC ";
neboli SELECT * FROM `eko` ORDER BY 1 ASC";
tento dotaz vybere z tabulky `eko` všechy sloupce i řádky a seřadí je podle 1 (která vznikla dotazením obsahu proměnné $id_hrace) - tzn. víceméně je neseřadí vůbec, zanechá je v pořadí, v jakém jsou v tabulce vloženy

u dalších dotazů je to to stejné (hmm, tak není, někde je ORDER BY id_hrace a někde ORDER BY $id_hrace)

ovšem vůbec z toho není patrné, čeho vlastně chceš dosáhnout
možná když popíšeš výsledný efekt toho všeho, tak se tomu někdo bude 5 minut věnovat a přepíše to do mnohem efektivnější podoby
gamer
Profil *
V podstatě chci, aby mi to z tabulky lo vypsalo počet všech cloud (příklad) pro všechny id_hrace v tý tabulce (každej má samozřejmě jinej počet) a vynásobilo mi to ten počet *585, dále aby to z tabulky eko vypsalo opět pro všechny hráče (kteří maj jinej počet) peníze a přičetlo k tomu počtu cloud * 585 a pak se to uložilo do tabulky eko opět všem hráčům.

Mě to buď jde jen pro mě nebo to připíše i ostatním ale to co mám dostat já a né oni...
gamer
Profil *
jinak ten kód už jsem upravil...

<?php
include "db.php";
?>

<?

$vyber = "SELECT * FROM `hrac` ORDER BY id_hrace ";
$odvyber = mysql_query( $vyber ) or die( mysql_error() );
$zasvyber = mysql_fetch_array( $odvyber );

$id_hrace = $zasvyber ['id_hrace'];

?>

<?

$sl1 = "SELECT * FROM `eko` ORDER BY $id_hrace";
$ekono1 = mysql_query( $sl1 ) or die( mysql_error() );
$eko1 = mysql_fetch_array( $ekono1 );

$pe = $eko1 ['penize'];
$r = $eko1 ['rudy'];
$t = $eko1 ['tylium'];
$po = $eko1 ['potraviny'];

?>
<?

    $sloupec1 = "SELECT * FROM `lo` ORDER BY $id_hrace";
    $lode1 = mysql_query( $sloupec1 ) or die( mysql_error() );
$lod1 = mysql_fetch_array( $lode1 );

    $pen = $lod1['cloud']*585 + $pe; 
    $penize = $pen;
    
     $ru = $lod1['mining']*458 + $r; 
    $rudy = $ru;
    
        $tyl = $lod1['rafinery']*325 + $t; 
    $tylium = $tyl;
    
     $potra = $lod1['botanic']*600 + $po; 
    $potraviny = $potra;
    
$doDB=mysql_query("UPDATE `eko` SET `penize` = '$penize', `rudy` = '$rudy', `tylium` = '$tylium',
`potraviny` = '$potraviny' WHERE id_hrace=$id_hrace LIMIT 100 ;");

?>

<?

$sl5 = "SELECT * FROM `eko` ORDER BY $id_hrace";
    $ekono5 = mysql_query( $sl5 ) or die( mysql_error() );
    
$eko5 = mysql_fetch_array( $ekono5 );
$popi = $eko5 ['populace'];

?>
<?

$sloupecek = "SELECT * FROM `eko` ORDER BY $id_hrace";
$popul = mysql_query( $sloupecek ) or die( mysql_error() );
$popka = mysql_fetch_array( $popul );

$populace = $popka['populace']*0.5 + $popi;

$doDB=mysql_query("UPDATE `eko` SET 
`populace` = '$populace' WHERE `id_hrace`=$id_hrace LIMIT 100 ;");

?>


Mastodont
Profil
<?

$vyber = "SELECT * FROM `hrac` ORDER BY id_hrace ";
$odvyber = mysql_query( $vyber ) or die( mysql_error() );
$zasvyber = mysql_fetch_array( $odvyber );

$id_hrace = $zasvyber ['id_hrace'];

?>


Viz dljl, to je naprosto zbytečné!!!!! Potřebuješ načíst jednu jedinou hodnotu a vybíráš všechny sloupce a všechny řádky??

SELECT id_hrace FROM `hrac` ORDER BY id_hrace LIMIT 1
gamer
Profil *
Z id_hracu nepotřebuju jeden řádek, ale všechny idčka co tam jsou
djlj
Profil
Navíc tam máš z nějakého důvodu SQL dotaz SELECT * FROM `eko` ORDER BY $id_hrace třikrát. Stačí jednou. Navíc nechápu, proč vybíráš celou tabulky, když ty řádky pak výsledně neprocházíš. Dá se to celé udělat nějak takto:

UPDATE eko
INNER JOIN (SELECT cloud, mining,rafinery,botanic FROM lo) AS l
SET `eko`.`penize` = `eko`.`penize` + `l`.`cloud`*585,
`eko`.`rudy` = `eko`.`rudy`+`l`.`mining`*458,
`eko`.`tylium` = `eko`.`tylium`+`l`.`rafinery`*325,
`eko`.`potraviny` =`eko`.`potraviny` + `l`.`botanic`*600,
`eko`.`populace` = `eko`.`populace`*0.5
WHERE l.id_hrace=eko.id_hrace
Mastodont
Profil
gamer
V kódu ale není nic, kde bys pracoval se "všemi ídečky"
gamer
Profil *
To vim...
WeezzeeR
Profil *
gamer
Kdyžtak se mi ozvi na ICQ 296-090-504 a něco vymyslíme ;)
djlj
Profil
Vždyť už jsem sem řešení napsal v poledne…
Gandalph
Profil *
<?php
include("db.php");
$query = "SELECT eko.*, lo.* FROM eko JOIN lo ON (hrac.id_hrace = lo.id_hrace)";
$result = mysql_query($query);
if(!$result) die(mysql_error());

while($hrac = mysql_fetch_array($result)) {
$penize = $hrac['penize'] + $hrac['cloud']*585;
$rudy = $hrac['rudy'] + $hrac['mining']*458;
$tylium = $hrac['tylium'] + $hrac['rafinery'] * 325;
$potraviny = $hrac['potraviny'] + $hrac['botanic'] * 600;
$populace = '$hrac['populace'] * 1.5;
$query = "UPDATE eko SET penize = $penize, rudy = $rudy, tylium = $tylium; potraviny = $potraviny, populace = $populace WHERE id_hrace = {$hrac['id_hrace']}";
if(!mysql_query($query)) echo("Varovani: selhal update hrace s id: {$hrac['id_hrace']}<br>\n");
}
mysql_free_result($result);
?>
Gandalph
Profil *
$query = "SELECT eko.*, lo.* FROM eko JOIN lo ON (hrac.id_hrace = lo.id_hrace)";
drobna oprava... nema tam byt hrac.id_hrace ale eko.id_hrace
Gandalph
Profil *
$query = "UPDATE eko SET penize = $penize, rudy = $rudy, tylium = $tylium; potraviny = $potraviny, populace = $populace WHERE id_hrace = {$hrac['id_hrace']}";
a jeste jeden drobny preklep :( za $tylium ma byt samozrejme , a ne ;
djlj
Profil
Tak já nevím, jestli je ten můj příspěvek neviditelný — že tu pořád něco vymýšlíte…
Gandalph
Profil *
djlj: neni neviditelny ale pry mu nefunguje
djlj
Profil
Gandalph
echo mysql_error() a doladit detaily, věřím, že to nefunguje. Ale proč to dělat jednoduše, když to jde i složitě, že ;).
gamer
Profil *
Jo, nefungoval, ale dík za snahu djlj ... jinak, ten Gandalphovo jde bez chyby :)
djlj
Profil
ale dík za snahu djlj
Není zač. Příště ji už vyvíjet nebudu.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: