Foreach loop in sql oid.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
mysql_query("UPDATE ppm_resources SET
stone='".($stone-$hqcost_arr['Stone'])."',
metal='".($metal-$hqcost_arr['Metal'])."',
food='".($food-$hqcost_arr['Food'])."',
wood='".($wood-$hqcost_arr['Wood'])."',
gold='".($gold-$hqcost_arr['Gold'])."'
WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
stone='".($stone-$hqcost_arr['Stone'])."',
metal='".($metal-$hqcost_arr['Metal'])."',
food='".($food-$hqcost_arr['Food'])."',
wood='".($wood-$hqcost_arr['Wood'])."',
gold='".($gold-$hqcost_arr['Gold'])."'
WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
Gewijzigd op 01/01/1970 01:00:00 door GaMer B
nee, volgens mij niet, of je moet je variabelen kortere namen geven, maar anders niet.
Miscchien een efficiente oplossing?
Wannt in principe is het iedere keer een stuk code maar dan is het eigelijk: Ctrl+v...
Edit:
Om het te laten zien wat ik voor ieder gebouw moet neerzetten:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?php
##
##BUILDING 1
##BUILDING 1
##
if(isset($_GET['action']) && isset($_GET['bid']) && $_GET['bid'] == 1){
$action = strtolower($_GET['action']);
$bid = $_GET['bid'];
if($action == "cancel"){
mysql_query("DELETE FROM ppm_countdown WHERE building='1' AND userid='".$_SESSION['user_id']."'") or die(mysql_error());
mysql_query("UPDATE ppm_resources SET
stone='".($stone + $hqcost_arr['Stone'])."',
metal='".($metal + $hqcost_arr['Metal'])."',
food='".($food + $hqcost_arr['Food'])."',
wood='".($wood + $hqcost_arr['Wood'])."',
gold='".($gold + $hqcost_arr['Gold'])."' WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
$relative_url = "buildings.php";
header("Location: http://".$_SERVER['HTTP_HOST']
.dirname($_SERVER['PHP_SELF'])
."/".$relative_url);
}
}
if(isset($_GET['action']) && isset($_GET['bid']) && $_GET['bid'] == 1){
$action = strtolower($_GET['action']);
$bid = $_GET['bid'];
if($action == "done" && $future_unix <= $now_unix){
mysql_query("DELETE FROM ppm_countdown WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
$result = mysql_query("UPDATE ppm_levels SET level='".($hq_lvl + 1)."' WHERE building='".$_GET['bid']."' AND userid='".$_SESSION['user_id']."'") or die(mysql_error());
$relative_url = "buildings.php";
header("Location: http://".$_SERVER['HTTP_HOST']
.dirname($_SERVER['PHP_SELF'])
."/".$relative_url);
}
}
?>
<?php
echo '<br />';
$check = mysql_query("SELECT * FROM ppm_countdown WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
$num_rows = mysql_num_rows($check);
$row = mysql_fetch_array($check);
$whatbuilding = $row['building'];
$future_unix = $row['targetdate_unix'];
if($num_rows == 0){
if($stone-$hqcost_arr['Stone'] <= 0 || $metal-$hqcost_arr['Metal'] <= 0 || $food-$hqcost_arr['Food'] <= 0 || $wood-$hqcost_arr['Wood'] <= 0 || $gold-$hqcost_arr['Gold'] <= 0){
echo "<span style='color: red;'>Upgrade</span>";
}else{
echo "<a href=\"?upgrade=".$md5_hq."&bid=1\">Upgrade</a>";
}
if(isset($_GET['upgrade']) && isset($_GET['bid']) && $_GET['bid'] == 1){
if($_GET['upgrade'] == $md5_hq){
$future_unix=strtotime("+".$string_future."seconds");
$now_unix=strtotime("NOW");
$diff = ($future_unix-$now_unix);
$future_format = date("Y-m-d H:i:s",$future_unix);
mysql_query("INSERT INTO ppm_countdown (userid,building,targetdate_unix,targetdate,cntseconds) VALUES ('".$_SESSION['user_id']."','".$_GET['bid']."','".$future_unix."','".$future_format."','".$diff."')") or die(mysql_error());
mysql_query("UPDATE ppm_resources SET stone='".($stone-$hqcost_arr['Stone'])."', metal='".($metal-$hqcost_arr['Metal'])."', food='".($food-$hqcost_arr['Food'])."', wood='".($wood-$hqcost_arr['Wood'])."', gold='".($gold-$hqcost_arr['Gold'])."' WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
$relative_url = "buildings.php";
header("Location: http://".$_SERVER['HTTP_HOST']
.dirname($_SERVER['PHP_SELF'])
."/".$relative_url);
}
}elseif(isset($_GET['upgrade']) && $_GET['upgrade'] != $md5_hq){
echo 'Error occured, or you messed up the upgrade link. Refresh the page to remove the mistake.';
}
}elseif($num_rows == 1){
if($whatbuilding == 1){
$query = mysql_query("SELECT targetdate_unix FROM ppm_countdown WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
$result = mysql_fetch_array($query);
$future_unix = $result['targetdate_unix'];
$now_unix=strtotime("NOW");
$difference = ($future_unix-$now_unix);
?>
<div id="bxx" class="z"></div>
<script language=JavaScript>
pp="<?php echo $difference; ?>";
bid="1";
t();
</script>
<?php
}else{
echo "";
}
}
?>
##
##BUILDING 1
##BUILDING 1
##
if(isset($_GET['action']) && isset($_GET['bid']) && $_GET['bid'] == 1){
$action = strtolower($_GET['action']);
$bid = $_GET['bid'];
if($action == "cancel"){
mysql_query("DELETE FROM ppm_countdown WHERE building='1' AND userid='".$_SESSION['user_id']."'") or die(mysql_error());
mysql_query("UPDATE ppm_resources SET
stone='".($stone + $hqcost_arr['Stone'])."',
metal='".($metal + $hqcost_arr['Metal'])."',
food='".($food + $hqcost_arr['Food'])."',
wood='".($wood + $hqcost_arr['Wood'])."',
gold='".($gold + $hqcost_arr['Gold'])."' WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
$relative_url = "buildings.php";
header("Location: http://".$_SERVER['HTTP_HOST']
.dirname($_SERVER['PHP_SELF'])
."/".$relative_url);
}
}
if(isset($_GET['action']) && isset($_GET['bid']) && $_GET['bid'] == 1){
$action = strtolower($_GET['action']);
$bid = $_GET['bid'];
if($action == "done" && $future_unix <= $now_unix){
mysql_query("DELETE FROM ppm_countdown WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
$result = mysql_query("UPDATE ppm_levels SET level='".($hq_lvl + 1)."' WHERE building='".$_GET['bid']."' AND userid='".$_SESSION['user_id']."'") or die(mysql_error());
$relative_url = "buildings.php";
header("Location: http://".$_SERVER['HTTP_HOST']
.dirname($_SERVER['PHP_SELF'])
."/".$relative_url);
}
}
?>
<?php
echo '<br />';
$check = mysql_query("SELECT * FROM ppm_countdown WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
$num_rows = mysql_num_rows($check);
$row = mysql_fetch_array($check);
$whatbuilding = $row['building'];
$future_unix = $row['targetdate_unix'];
if($num_rows == 0){
if($stone-$hqcost_arr['Stone'] <= 0 || $metal-$hqcost_arr['Metal'] <= 0 || $food-$hqcost_arr['Food'] <= 0 || $wood-$hqcost_arr['Wood'] <= 0 || $gold-$hqcost_arr['Gold'] <= 0){
echo "<span style='color: red;'>Upgrade</span>";
}else{
echo "<a href=\"?upgrade=".$md5_hq."&bid=1\">Upgrade</a>";
}
if(isset($_GET['upgrade']) && isset($_GET['bid']) && $_GET['bid'] == 1){
if($_GET['upgrade'] == $md5_hq){
$future_unix=strtotime("+".$string_future."seconds");
$now_unix=strtotime("NOW");
$diff = ($future_unix-$now_unix);
$future_format = date("Y-m-d H:i:s",$future_unix);
mysql_query("INSERT INTO ppm_countdown (userid,building,targetdate_unix,targetdate,cntseconds) VALUES ('".$_SESSION['user_id']."','".$_GET['bid']."','".$future_unix."','".$future_format."','".$diff."')") or die(mysql_error());
mysql_query("UPDATE ppm_resources SET stone='".($stone-$hqcost_arr['Stone'])."', metal='".($metal-$hqcost_arr['Metal'])."', food='".($food-$hqcost_arr['Food'])."', wood='".($wood-$hqcost_arr['Wood'])."', gold='".($gold-$hqcost_arr['Gold'])."' WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
$relative_url = "buildings.php";
header("Location: http://".$_SERVER['HTTP_HOST']
.dirname($_SERVER['PHP_SELF'])
."/".$relative_url);
}
}elseif(isset($_GET['upgrade']) && $_GET['upgrade'] != $md5_hq){
echo 'Error occured, or you messed up the upgrade link. Refresh the page to remove the mistake.';
}
}elseif($num_rows == 1){
if($whatbuilding == 1){
$query = mysql_query("SELECT targetdate_unix FROM ppm_countdown WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
$result = mysql_fetch_array($query);
$future_unix = $result['targetdate_unix'];
$now_unix=strtotime("NOW");
$difference = ($future_unix-$now_unix);
?>
<div id="bxx" class="z"></div>
<script language=JavaScript>
pp="<?php echo $difference; ?>";
bid="1";
t();
</script>
<?php
}else{
echo "";
}
}
?>
Gewijzigd op 01/01/1970 01:00:00 door GaMer B
EDIT: 96 regels voor 1 gebouw, ik weet niet wat voor spel het is en heb je code ook niet grondig bestudeerd, dus weet ook niet precies wat er voor 1 gebouw allemaal moet gebeuren, maar kun je niet een paar query's samennemen oid?
en eventueel dezelfde code meerdere keren gebruiken door middel van een for loop?
dat voor elk gebouw steeds dezelfde code doorlopen wordt, eventueel met gebouwafhankelijke variabelen.
Gewijzigd op 01/01/1970 01:00:00 door Stefan van Iwaarden
Gebouw 1 gebruikt: $hq.... (headquarters)
Gebouw 2 gebruikt: $sm... (stonemine) etc.
EDIT:
Toch zijn er wel veel dingen die met de hand bewerkt moet worden, dus ik zal maar eerst beginnen met alles in een config te zetten en dan kijk ik wel wat er te verkleinen is.
Maar wel raar dat er geen loop oid kan worden gebruikt in een sql query.
Gewijzigd op 01/01/1970 01:00:00 door GaMer B
GaMer13 schreef op 09.03.2007 14:01:
En wat is daar het doel van? Zolang de query op 1 A4-tje past, is er sprake van een korte query. Wat is dan het probleem?Is het mogelijk om deze query korter op te schrijven?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
mysql_query("UPDATE ppm_resources SET
stone='".($stone-$hqcost_arr['Stone'])."',
metal='".($metal-$hqcost_arr['Metal'])."',
food='".($food-$hqcost_arr['Food'])."',
wood='".($wood-$hqcost_arr['Wood'])."',
gold='".($gold-$hqcost_arr['Gold'])."'
WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
stone='".($stone-$hqcost_arr['Stone'])."',
metal='".($metal-$hqcost_arr['Metal'])."',
food='".($food-$hqcost_arr['Food'])."',
wood='".($wood-$hqcost_arr['Wood'])."',
gold='".($gold-$hqcost_arr['Gold'])."'
WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
Overigens gok ik dat 99% van de gebruikers hier op phphulp nog nooit een query van meer dan een half A4'tje heeft gemaakt, dus je opmerking dat een query korter dan een A4'tje niet lang is mist hier even z'n doel M.I.
@Pim: 1 A4-tje of 7 regeltjes. Het lijkt mij dan wel duidelijk dat hier sprake is van een korte query. Het lijkt mij dan ook zinloos om dat verder te optimaliseren, tijdswinst valt daar niet of nauwelijks te maken.
Ik heb wel queries gedraait van iets meer regels. Wat denk je als je 2500 records moet invoeren?
Jurgen schreef op 09.03.2007 15:03:
Ik heb wel queries gedraait van iets meer regels. Wat denk je als je 2500 records moet invoeren?
Dat zijn meestal 2500 loss queries
Frank schreef op 09.03.2007 15:00:
Het gaat hier denk ik om het genereren van query's, niet om de tijdsduur van het uitvoeren ervan. De TS is opzoek naar een makkelijke, snelle manier om query's te bouwen, in plaats van het steeds zelf typen van de query's.@Pim: 1 A4-tje of 7 regeltjes. Het lijkt mij dan wel duidelijk dat hier sprake is van een korte query. Het lijkt mij dan ook zinloos om dat verder te optimaliseren, tijdswinst valt daar niet of nauwelijks te maken.
@TS:
In dit geval zou het niet veel uitmaken, aangezien je de gegevens nog bewerkt voordat je ze in de database zet. Anders zou het vrij makkelijk met een foreach constructie kunnen. Zoek even op sql generator oid. Zat scriptjes die al doen wat je vraagt.
En dan maakt een query van 7 regels opeens niet meer uit...
Okej, bedankt voor de tips. Ik zal er aan gaan werken.