anpera.net https://anpera.homeip.net/phpbb3/ |
|
Denkfehler im sql bereich oder zuviel gemacht? dasher gilde https://anpera.homeip.net/phpbb3/viewtopic.php?f=34&t=3083 |
Seite 1 von 1 |
Autor: | Rikkarda [ Di 07 Nov, 2006 21:18 ] |
Betreff des Beitrags: | Denkfehler im sql bereich oder zuviel gemacht? dasher gilde |
Ich habe folgendes Problem.. ich habe ja wie bekannt die Dasher Gilden bei mir modifiziert laufen, d.h. ich habe sie speziell für Silienta mit nützlichen Funktionen erweitert. Dazu gehört auch das automatische Kicken von inaktiven Gildenleichen über die setnewday.php der Ausschnitt den ich bisher nutze sieht so aus: $this->bbcode_second_pass_code('', '// this now includes the database cleanup from guild.php kicken von inaktiven Gildenmembern //by Rikkarda@silienta-logd.de for the dasher guilds //unter 1 dk $old2 = getsetting("expireoldguild",10); //über 1 dk $old3 = getsetting("expireoldguilddk",25); //unter 1 dk $sql2 = "UPDATE `accounts` SET `guildid`='0',`guildrank`='0',`goldafterdk`='0',`gold`=`gold`+`cg_spendgold`-`cg_getgold`,`gems`=`gems`+`cg_spendgems`-`cg_getgems`,`cg_spendgems`='0', `cg_getgems`='0', `cg_spendgold`='0', `cg_getgold`='0' WHERE `guildid`>'0' AND `dragonkills`<'1' AND `laston` < '".date("Y-m-d H:i:s",strtotime("-$old2 days"))."'"; db_query($sql2); //über 1 dk $sql3 = "UPDATE `accounts` SET `guildid`='0',`guildrank`='0',`goldafterdk`='0',`gold`=`gold`+`cg_spendgold`-`cg_getgold`,`gems`=`gems`+`cg_spendgems`-`cg_getgems`,`cg_spendgems`='0', `cg_getgems`='0', `cg_spendgold`='0', `cg_getgold`='0' WHERE `guildid`>'0' AND `dragonkills`>='1' AND `laston` < '".date("Y-m-d H:i:s",strtotime("-$old3 days"))."'"; db_query($sql3); //end by Rikkarda') funktioniert und erfüllt seinen Zweck bei "normalen" Gildenmitgliedern.. nun mein Problem. Ist das inaktive Gildenmitglied im Vorstand der Gilde, werden zwar alle o.g. Daten gelöscht und er zählt als "Gildenlos" ABER er steht noch immer als Vorstandsmitglied in der Gilde.. die 2. Tabelle die dies nun wäre, wäre die Tabelle lotbd_guilds in der unter den 3 kürzeln des Vorstands die acctid des Vorstandmitgliedes eingetragen wird. also entweder feld GuildLeader oder HeadOfMembership oder HeadOfWar . ist es möglich in meine oben gemachte Abfrage auch dafür zu sorgen, dass das entsprechende Feld in der Gildenhaupttabelle auf 0 gesetzt wird? also das Feld, wo die acctid des inaktiven Gildenmembers drin ist zu leeren? irgendwie will mein kopf da nimmer ![]() lg Rikka |
Autor: | Darkness [ Di 07 Nov, 2006 21:52 ] |
Betreff des Beitrags: | |
Also das mit dem update von 2 Tabellen so wie du es dir vorstellst geht nicht... aber ich hab hier mal kutz was gebastelt, probiers mal damit^^ (ist natürlich ungetestet) {gilden_tabelle} musste durch den namen der gildentabelle ersetzen und {gilden_id} eben duch das Namen des id-feldes^^ weiß ja nicht, wie die bei dir heißen... und beim $array musste gucken ob ich das richtige reingeschrieben hab^^ [php]<?php // unter 1 dk $old2 = getsetting("expireoldguild",10); // über 1 dk $old3 = getsetting("expireoldguilddk",25); // Hier die Felder der Gildentabelle $array = array('GuildLeader','HeadOfMembership','HeadOfWar'); //unter 1 dk $sql = "SELECT acctid, guildid FROM accounts WHERE `guildid`>'0' AND `dragonkills`<'1' AND `laston` < '".date("Y-m-d H:i:s",strtotime("-$old2 days"))."'"; $result = db_query($sql); while ($row = db_fetch_assoc($result)){ $sql = "UPDATE `accounts` SET `guildid`='0', `guildrank`='0', `goldafterdk`='0', `gold`=`gold`+`cg_spendgold`-`cg_getgold`, `gems`=`gems`+`cg_spendgems`-`cg_getgems`, `cg_spendgems`='0', `cg_getgems`='0', `cg_spendgold`='0', `cg_getgold`='0' WHERE acctid=".$row['acctid']; db_query($sql); reset($array); while ($field=current($array)){ $sql = "UPDATE {gilden_tabelle} SET $field=0 WHERE {gilden_id}='".$row['guildid']."' $field=".$row['acctid']; db_query($sql); next($array); } } //über 1 dk $sql = "SELECT acctid, guildid FROM accounts WHERE `guildid`>'0' AND `dragonkills`>='1' AND `laston` < '".date("Y-m-d H:i:s",strtotime("-$old3 days"))."'"; $result = db_query($sql); while ($row = db_fetch_assoc($result)){ $sql = "UPDATE `accounts` SET `guildid`='0', `guildrank`='0', `goldafterdk`='0', `gold`=`gold`+`cg_spendgold`-`cg_getgold`, `gems`=`gems`+`cg_spendgems`-`cg_getgems`, `cg_spendgems`='0', `cg_getgems`='0', `cg_spendgold`='0', `cg_getgold`='0' WHERE acctid=".$row['acctid']; db_query($sql); reset($array); while ($field=current($array)){ $sql = "UPDATE {gilden_tabelle} SET $field=0 WHERE {gilden_id}=".$row['guildid']." $field=".$row['acctid']; db_query($sql); next($array); } } ?>[/php] |
Autor: | Rikkarda [ Mi 08 Nov, 2006 15:24 ] |
Betreff des Beitrags: | |
nachher mal testet ![]() |
Autor: | Eliwood [ Mi 08 Nov, 2006 17:02 ] |
Betreff des Beitrags: | |
[php]$sql = "UPDATE {gilden_tabelle} SET $field=0 WHERE {gilden_id}=".$row['guildid']." $field=".$row['acctid']; [/php] Fehlt ein AND: [php]$sql = "UPDATE {gilden_tabelle} SET $field=0 WHERE {gilden_id}=".$row['guildid']." AND $field=".$row['acctid']; [/php] |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |