Autor | Zpráva | ||
---|---|---|---|
grossik Profil |
#1 · Zasláno: 18. 4. 2016, 20:47:53
Dobrý den, mám problém s přičtením surovin pro všechny podle toho jakou mají produkci. V MySQL jsem začátečník a na tomhle přemýšlím už víc jak dva dny.
$sql = "SELECT * FROM resources"; $result = $conn->query($sql); $vstup1 = mysqli_query($conn, "SELECT * FROM resources"); $riadky = mysqli_num_rows($vstup1); $intopakovac = 0; while($riadky >= $intopakovac) { $row = $result->fetch_assoc(); $cityId = $row['city_id']; $sql = "SELECT planks_production, ore_production, clay_production, food_production FROM production WHERE city_id = '$cityId'"; $result = mysqli_query($conn, $sql); $intopakovac++; $row = mysqli_fetch_assoc($result); $planks_production = $row['planks_production']; $ore_production = $row['ore_production']; $clay_production = $row['clay_production']; $food_production = $row['food_production']; $sql = "UPDATE resources SET planks = planks + '$planks_production' WHERE city_id = '$cityId'"; if (mysqli_query($conn, $sql)) { echo "Cities' planks have been updated!<br/>"; } $sql = "UPDATE resources SET ore = ore + '$ore_production' WHERE city_id = '$cityId'"; if (mysqli_query($conn, $sql)) { echo "Cities' ore have been updated!<br/>"; } $sql = "UPDATE resources SET clay = clay + '$clay_production' WHERE city_id = '$cityId'"; if (mysqli_query($conn, $sql)) { echo "Cities' clay have been updated!<br/>"; } $sql = "UPDATE resources SET food = food + '$food_production' WHERE city_id = '$cityId'"; if (mysqli_query($conn, $sql)) { echo "Cities' food have been updated!<br/>"; } } Tento kód mi furt bere produkci od prvního z tabulky a přičte mu jí, ale toho druhého to ignoruje. |
||
Lonanek Profil |
grossik:
„ale toho druhého to ignoruje.“ Protože si na ř. 13 a 15 přepíšete důležité proměnné. Změňte pro druhý dotaz $result a $row. Pro procházení všech záznamů stačí použít: ... while ($row = $result->fetch_assoc()) { ... } |
||
grossik Profil |
#3 · Zasláno: 18. 4. 2016, 21:17:11
Pokud tam místo těch dvou řádku dám while ($row = $result->fetch_assoc())... tak mi to způsobí nekonečné načítání stránky a pokud odstraním while($riadky >= $intopakovac) tak mám jen bílou obrazovku bez ničeho. Nevím jestli něco nedělám špatně.
|
||
Dan Charousek Profil |
Na tom kódu je hodně co zlepšovat, určitě bych se vyhnul několikanásobnému updatu na řádcích 22-44
Pokud jsou tabulky resources a production ve vztahu 1:1, tak tabulku resources vůbec procházet nemusíš. Šel bych na to nějak takto (za předpokladu, že to děláš procedurárně - nerozumím řádku 1, 2 a 4). $production = mysqli_query($conn, "SELECT * FROM production"); while($row = mysqli_fetch_assoc($production)) { $updateQuery = "UPDATE resources SET planks = planks + $row[planks_production], ore = ore + $row[ore_production], clay = clay + $row[clay_production], food = food + $row[food_production] WHERE city_id = " . $row['city_id']; mysqli_query($conn, $updateQuery); } // edit: opravil jsem špatně uvedený název proměnné |
||
Lonanek Profil |
Takhle jste to zkoušel?
$sql = "SELECT * FROM resources"; $result = $conn->query($sql); $vstup1 = mysqli_query($conn, "SELECT * FROM resources"); $riadky = mysqli_num_rows($vstup1); while($row = $result->fetch_assoc()) { $cityId = $row['city_id']; $sql = "SELECT planks_production, ore_production, clay_production, food_production FROM production WHERE city_id = '$cityId'"; $result_1 = mysqli_query($conn, $sql); $row_1 = mysqli_fetch_assoc($result); $planks_production = $row_1['planks_production']; $ore_production = $row_1['ore_production']; $clay_production = $row_1['clay_production']; $food_production = $row_1['food_production']; $sql = "UPDATE resources SET planks = planks + '$planks_production' WHERE city_id = '$cityId'"; if (mysqli_query($conn, $sql)) { echo "Cities' planks have been updated!<br/>"; } $sql = "UPDATE resources SET ore = ore + '$ore_production' WHERE city_id = '$cityId'"; if (mysqli_query($conn, $sql)) { echo "Cities' ore have been updated!<br/>"; } $sql = "UPDATE resources SET clay = clay + '$clay_production' WHERE city_id = '$cityId'"; if (mysqli_query($conn, $sql)) { echo "Cities' clay have been updated!<br/>"; } $sql = "UPDATE resources SET food = food + '$food_production' WHERE city_id = '$cityId'"; if (mysqli_query($conn, $sql)) { echo "Cities' food have been updated!<br/>"; } } |
||
grossik Profil |
#6 · Zasláno: 18. 4. 2016, 21:34:22
Teď mi to píše chyby
Undefined index: planks_production Undefined index: ore_production Undefined index: clay_production Undefined index: food_production |
||
Lonanek Profil |
jj moje chyba - ř. 12:
$row_1 = mysqli_fetch_assoc($result_1); |
||
Dan Charousek Profil |
#8 · Zasláno: 18. 4. 2016, 21:37:13
grossik:
Měl jsem špatně pojmenovanou proměnnou. - Viz. upravený příspěvek [#4] Dan Charousek |
||
grossik Profil |
#9 · Zasláno: 18. 4. 2016, 21:37:24
Jo ani já jsem si toho nevšiml, děkuju moc už vše funguje jak má.
|
||
xaverista Profil |
#10 · Zasláno: 18. 4. 2016, 21:37:28
grossik:
tuším, že upravit tento řádek $cityId = $row['city_id']; $sql = "SELECT planks_production, ore_production, clay_production, food_production FROM production WHERE city_id = '$cityId'"; $result_1 = mysqli_query($conn, $sql); $row_1 = mysqli_fetch_assoc($result_1); |
||
Lonanek Profil |
#11 · Zasláno: 18. 4. 2016, 21:37:43
Řešení od Dan Charousek [#4] jste zkoušel aplikovat?
|
||
grossik Profil |
Lonanek:
Ano a funguje to také. Všem vám moc děkuji za rychlé odpovědi a za pomoc. |
||
Dan Charousek Profil |
#13 · Zasláno: 18. 4. 2016, 21:44:11
grossik:
Vím, že je to už trochu mimo zadaný problém, ale nejde mi na rozum, k čemu potřebuješ globálně aktualizovat zdroje všech (hádám) lidí/hráčů - měst? |
||
Časová prodleva: 8 let
|
0