Autor | Zpráva | ||
---|---|---|---|
gamer Profil * |
#1 · Zasláno: 15. 2. 2008, 19:15:32
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 |
#2 · Zasláno: 15. 2. 2008, 19:18:09
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 * |
#3 · Zasláno: 15. 2. 2008, 19:44:32
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 |
#4 · Zasláno: 15. 2. 2008, 19:55:20
gamer
Jak již napsal nightfish, podívej se třeba na linuxsoft a podívej se na kapitolu kde je WHERE. |
||
gamer Profil * |
#5 · Zasláno: 15. 2. 2008, 20:01:07
oki, kouknu, dík
|
||
Joker Profil |
#6 · Zasláno: 15. 2. 2008, 20:16:46
nightfish
ufff, ufff, chudák databáze Zajímavé, přesně tohle při čtení dotazu napadlo i mě :-) |
||
djlj Profil |
#7 · Zasláno: 16. 2. 2008, 00:29:13
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 |
#8 · Zasláno: 16. 2. 2008, 00:36:54
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 * |
#9 · Zasláno: 16. 2. 2008, 09:13:39
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 |
#10 · Zasláno: 16. 2. 2008, 09:52:39
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 * |
#11 · Zasláno: 16. 2. 2008, 10:54:55
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 * |
#12 · Zasláno: 16. 2. 2008, 10:56:41
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 |
#13 · Zasláno: 16. 2. 2008, 12:36:19
<? $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 * |
#14 · Zasláno: 16. 2. 2008, 12:51:56
Z id_hracu nepotřebuju jeden řádek, ale všechny idčka co tam jsou
|
||
djlj Profil |
#15 · Zasláno: 16. 2. 2008, 13:11:09
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 |
#16 · Zasláno: 16. 2. 2008, 14:28:50
gamer
V kódu ale není nic, kde bys pracoval se "všemi ídečky" |
||
gamer Profil * |
#17 · Zasláno: 16. 2. 2008, 14:59:18
To vim...
|
||
WeezzeeR Profil * |
#18 · Zasláno: 16. 2. 2008, 21:59:10
gamer
Kdyžtak se mi ozvi na ICQ 296-090-504 a něco vymyslíme ;) |
||
djlj Profil |
#19 · Zasláno: 16. 2. 2008, 22:01:38
Vždyť už jsem sem řešení napsal v poledne…
|
||
Gandalph Profil * |
#20 · Zasláno: 17. 2. 2008, 14:44:54
<?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 * |
#21 · Zasláno: 17. 2. 2008, 14:49:34
$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 * |
#22 · Zasláno: 17. 2. 2008, 14:51:30
$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 |
#23 · Zasláno: 17. 2. 2008, 15:38:30
Tak já nevím, jestli je ten můj příspěvek neviditelný — že tu pořád něco vymýšlíte…
|
||
Gandalph Profil * |
#24 · Zasláno: 17. 2. 2008, 16:24:45
djlj: neni neviditelny ale pry mu nefunguje
|
||
djlj Profil |
#25 · Zasláno: 17. 2. 2008, 17:31:45
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 * |
#26 · Zasláno: 17. 2. 2008, 19:01:24
Jo, nefungoval, ale dík za snahu djlj ... jinak, ten Gandalphovo jde bez chyby :)
|
||
djlj Profil |
#27 · Zasláno: 17. 2. 2008, 19:19:04
ale dík za snahu djlj
Není zač. Příště ji už vyvíjet nebudu. |
||
Časová prodleva: 16 let
|
0