Foreach loop in sql oid.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

GaMer B

GaMer B

09/03/2007 14:01:00
Quote Anchor link
Is het mogelijk om deze query korter op te schrijven?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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());
Gewijzigd op 01/01/1970 01:00:00 door GaMer B
 
PHP hulp

PHP hulp

20/11/2024 10:29:03
 
Stefan van Iwaarden

Stefan van Iwaarden

09/03/2007 14:07:00
Quote Anchor link
nee, volgens mij niet, of je moet je variabelen kortere namen geven, maar anders niet.
 
GaMer B

GaMer B

09/03/2007 14:11:00
Quote Anchor link
O, okej, jmmr, want dit vreet plaats als dit zo door gaat. (Voor een spel om je grondstoffen te updaten nadat het gebouw wordt gemaakt.) Omdat het 15 gebouwen op 1 pagina is.
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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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 "";
                }
            }

?>
Gewijzigd op 01/01/1970 01:00:00 door GaMer B
 
Stefan van Iwaarden

Stefan van Iwaarden

09/03/2007 14:14:00
Quote Anchor link
Tja, ik weet niet hoe je code in elkaar zit en of deze ook efficient gemaakt is, maar een script van 400 a 500 regels komt meer voor hoor.

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
 
GaMer B

GaMer B

09/03/2007 14:20:00
Quote Anchor link
Tis meer een tekst-based strategie spel waarbij je gebouwen kunt upgraden e.d. Verder om fraude te voorkomen heb ik nogal veel checks erin zitten... Misschien zou ik een for loop kunnen doen omdat alleen een paar dingetjes veranderen...
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
 
Frank -

Frank -

09/03/2007 14:41:00
Quote Anchor link
GaMer13 schreef op 09.03.2007 14:01:
Is het mogelijk om deze query korter op te schrijven?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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());
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?
 
Pim Vernooij

Pim Vernooij

09/03/2007 14:54:00
Quote Anchor link
@Frank: ik denk dat de TS de query 'makkelijker' wil opbouwen door bijvoorbeeld een array mee te geven, waarmee een query automatisch gegenereerd kan worden.

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.
 
Frank -

Frank -

09/03/2007 15:00:00
Quote Anchor link
@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.
 
Jurgen assaasas

Jurgen assaasas

09/03/2007 15:03:00
Quote Anchor link
Ik heb wel queries gedraait van iets meer regels. Wat denk je als je 2500 records moet invoeren?
 
Klaasjan Boven

Klaasjan Boven

09/03/2007 15:07:00
Quote Anchor link
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
 
Pim Vernooij

Pim Vernooij

09/03/2007 16:11:00
Quote Anchor link
Frank schreef op 09.03.2007 15:00:
@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.
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.

@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.
 
Joren de Wit

Joren de Wit

09/03/2007 17:02:00
Quote Anchor link
Voordat je daar naar kijkt zou ik eerst eens kijken naar het optimaliseren van je php script. Je kunt met de tip van Stefan (een for loop met gebouwafhankelijke variabelen) je code al veel verder in korten. Als jij voor 15 gebouwen 15 keer precies dezelfde code gebruikt, kan dat in de meeste gevallen altijd korter.

En dan maakt een query van 7 regels opeens niet meer uit...
 
GaMer B

GaMer B

09/03/2007 17:38:00
Quote Anchor link
Okej, bedankt voor de tips. Ik zal er aan gaan werken.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.