| 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: 10 let
|
|||
0