Avatar billede shjorth Nybegynder
31. august 2008 - 12:50 Der er 18 kommentarer og
1 løsning

Optimering af kode (PHP)

Hejsa.

Jeg har lavet flg, som skal bruges til et cronjob. Jeg er dog lidt i tvivl om hvorvidt det her er smart, eller om det kan gøres smartere, altså så det måske kunne arbejde hurtigere, da der er en hel del brugere i min database :-)

require("../conn.inc.php");

$idag = date("d/m-Y");

$is = mysql_query("SELECT * FROM bank_cron WHERE date = '".$idag."'")or die(mysql_error());
if(mysql_num_rows($is)==0) {

$q = mysql_query("SELECT * FROM bank WHERE balance > 10")or die(mysql_error());
while($row = mysql_fetch_array($q)) {

$balance = floor($row['balance']*0.01);
$new_balance = $balance+$row['balance'];

mysql_query("UPDATE bank SET balance = '".$new_balance."' WHERE userid = '".$row['userid']."'")or die(mysql_error());
}
mysql_query("UPDATE facebook_fa_bank_cron SET date = '".$idag."' WHERE id = '1'")or die(mysql_error());


Håber i kan hjælpe :) Mange tak
Avatar billede shjorth Nybegynder
31. august 2008 - 12:51 #1
"facebook_fa_bank_cron" <-- skal lige ændres til "bank_cron"
Avatar billede fbisen Nybegynder
31. august 2008 - 13:07 #2
Måske er det muligt, alt efter din struktur, at ændre
---
$idag = date("d/m-Y");

$is = mysql_query("SELECT * FROM bank_cron WHERE date = '".$idag."'")or die(mysql_error());
---
til
---
$is = mysql_query("SELECT * FROM bank_cron WHERE date = CURDATE()")or die(mysql_error());
---

Dette kan måske også bruges senere, hvor du bruger $idag.
Avatar billede w13 Novice
31. august 2008 - 13:32 #3
Måske sådan her:

require("../conn.inc.php");

$is = mysql_query("SELECT * FROM bank_cron WHERE date = CURDATE()")or die(mysql_error());
if(mysql_num_rows($is)==0) {

    $q = mysql_query("UPDATE bank SET balance=balance+(balance*0.01) WHERE balance > 10") or die(mysql_error());

    mysql_query("UPDATE bank_cron SET date = CURDATE() WHERE id = 1")vor die(mysql_error());
Avatar billede w13 Novice
31. august 2008 - 13:33 #4
Jeg er ikke super stærk i syntaksen, men det kan i hvert fald gøres nogenlunde sådan.
Avatar billede w13 Novice
31. august 2008 - 13:33 #5
Hov, jeg havde skrevet "vor" i stedet for "or":

require("../conn.inc.php");

$is = mysql_query("SELECT * FROM bank_cron WHERE date = CURDATE()")or die(mysql_error());
if(mysql_num_rows($is)==0) {

    $q = mysql_query("UPDATE bank SET balance=balance+(balance*0.01) WHERE balance > 10") or die(mysql_error());

    mysql_query("UPDATE bank_cron SET date = CURDATE() WHERE id = 1") or die(mysql_error());

I øvrigt mangler der jo i dén kode den afsluttende }
Avatar billede dkfire Nybegynder
31. august 2008 - 13:44 #6
Er date ikke et reserveret ord i mysql ???
Avatar billede fbisen Nybegynder
31. august 2008 - 13:47 #7
[OFFTOPIC]
Det mener jeg også det er. Men har også selv brugt det i nogle tabeller. Hvad betyder det, sådan rent brugsmæssigt, at mysql har et ord reserveret? Har altid undret mig.
Avatar billede w13 Novice
31. august 2008 - 13:50 #8
Reserverede ord burde vel ikke kunne fungere, da de har en eller anden funktion, som de i stedet udøver. Men jeg mente nu også, date burde være reserveret. Hm.
Avatar billede shjorth Nybegynder
31. august 2008 - 13:55 #9
Tak for de mange svar, super lækkert :)

Jeg vidste ikke at "date" er et reserveret ord.. Den har jeg brugt mange gange.
Men er det det samme som f.eks "by" ? Det har jeg nemlig aldrig kunne bruge
Avatar billede w13 Novice
31. august 2008 - 13:58 #10
Ja, by er præcis det samme.
Avatar billede dkfire Nybegynder
31. august 2008 - 13:58 #11
Det er præcis det samme som by, men det kan godt være at date ikke er reserveret i mysql.
Avatar billede w13 Novice
31. august 2008 - 13:59 #12
Du kan dog bruge dem alligevel, hvis du sætter ` omkring.
Avatar billede w13 Novice
31. august 2008 - 14:00 #13
Listen er her:
http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-reservedwords-5-0.html

Date er ikke på denne her. Men f.eks. ved en Access-database er Date reserveret.
Avatar billede dkfire Nybegynder
31. august 2008 - 17:26 #14
Bør man egentlig ikke undgå * i sql ??
Jeg ville nok rette:
$is = mysql_query("SELECT * FROM bank_cron WHERE date = CURDATE()")or die(mysql_error());
if(mysql_num_rows($is)==0) {

til:
$is = mysql_query("SELECT COUNT(id) FROM bank_cron WHERE date = CURDATE()")or die(mysql_error());
if(mysql_result($is,0)==0) {
Avatar billede w13 Novice
31. august 2008 - 17:31 #15
Ah ja, selvfølgelig. Det er også rigtig vigtigt i optimering.
Avatar billede w13 Novice
31. august 2008 - 17:36 #16
Så det må blive:

require("../conn.inc.php");

$is = mysql_query("SELECT COUNT(id) FROM bank_cron WHERE date = CURDATE()") or die(mysql_error());
if(mysql_num_rows($is,0)==0) {

    mysql_query("UPDATE bank SET balance=balance+(balance*0.01) WHERE balance>10") or die (mysql_error());

    mysql_query("UPDATE bank_cron SET date = CURDATE() WHERE id = 1") or die (mysql_error());

}
Avatar billede dkfire Nybegynder
31. august 2008 - 17:47 #17
w13: du vil vel ikke bruge mysql_num_rows ??
Jeg vil tro du mener:

require("../conn.inc.php");

$is = mysql_query("SELECT COUNT(id) FROM bank_cron WHERE date = CURDATE()") or die(mysql_error());
if(mysql_result($is,0)==0) {

    mysql_query("UPDATE bank SET balance=balance+(balance*0.01) WHERE balance>10") or die (mysql_error());

    mysql_query("UPDATE bank_cron SET date = CURDATE() WHERE id = 1") or die (mysql_error());

}
Avatar billede w13 Novice
31. august 2008 - 18:21 #18
Jeg burde have copy+pastet ja. :)
Avatar billede shjorth Nybegynder
12. juni 2010 - 20:54 #19
Lukker her, skriv endelig hvis i vil have point :P
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester