tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
13
ZUGRIFFE
669
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    lifehunter lifehunter ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Beiträge
    184
    Also ich will folgendes machen. Immer wenn man sich einloggt, wird gecheckt ob an diesem Tag die Datenbank schon aktualisiert wurde. Wenn dies nicht der Fall ist, wird dieses Script ausgeführt:
    PHP-Code:
    <? 
    $checkresult
    =mysql_query("SELECT `datum` FROM `systemcheck`");
    $check=mysql_result($checkresult'datum');

    $result=mysql_query("SELECT `ID` FROM `userdaten` WHERE `geb` between '$check' and now()");
    for(
    $i=0;$i<mysql_num_rows($result);$i++)
         
    $data[$i]=mysql_fetch_array($result);
    for(
    $i=0;$i<count($data);$i++){
         
    $ageresult=mysql_query("SELECT `age` FROM `profil` WHERE `ID`='".$data[$i]["ID"]."'");
         
    $age=mysql_result($ageresult'age');
         
    $age=$age++;
         
    mysql_query("UPDATE `profil` SET `age`='$age' WHERE `ID`='".$date[$i]["ID"]."'");
         }

    $mailage date("Y-m-d",mktime(000date("m"), date("d")-1date("Y")));
    $mailold date("Y-m-d",mktime(000date("m"), date("d")-2date("Y")));

    //gelesene Nachrichten löschen
    mysql_query("DELETE `inbox` WHERE `date`<$mailage AND `lesen`>'0'");
    mysql_query("DELETE `outbox` WHERE `date`<$mailage AND `lesen`>'0'");

    //ungelesene Nachrichten löschen
    mysql_query("DELETE `inbox` WHERE `date`<$mailold");
    mysql_query("DELETE `outbox` WHERE `date`<$mailold");

    mysql_query("UPDATE `systemcheck` SET `datum`=now()");
    ?>
    Zur Erklärung: Als erstes wird das Datum des letzten Checks ausgelesen. Dann werden alle User ausgegeben welche seit dem letzten Check Geburstag hatten. Deren Alter soll um 1 hochgezählt werden.
    Der 2. Teil löscht alle Nachrichten die älter als 1 bzw. 2 Monate alt sind.

    Also das mit dem Alter konnte ich bisher noch nicht testen, weil bisher keiner Geburtag hatte. Nachrichten die alt genug sind gibt es aber. Leider werden die aber nicht gelöscht. Das Script wird ausgeführt. Das merke ich daran dass das Datum in der Tabelle "systemcheck" erneuert wird.
    Kann mir da jemand weiterhelfen?!
    Danke im Vorraus
    MfG
    Geändert von lifehunter (12.08.05 um 17:52 Uhr)
     

  2. #2
    lifehunter lifehunter ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Beiträge
    184
    selbst nach dieser Änderung klappt es net

    PHP-Code:
    mysql_query("DELETE `inbox` WHERE `date` between $mailage and now() AND `lesen` IS NOT '0'");
    mysql_query("DELETE `inbox` WHERE `date` between $mailold and now()");
    mysql_query("DELETE `outbox` WHERE `date`between $mailage and now() AND `lesen` IS NOT '0'");
    mysql_query("DELETE `outbox` WHERE `date` between $mailold and now()"); 
     

  3. #3
    Registriert seit
    Mar 2005
    Ort
    Bühl/Baden
    Beiträge
    2.330
    Wenn du mit mysql_error() arbeiten würdest, wäre der Fehler gleich gefunden. Mehr sag ich dazu nicht.
     
    Gruß fanste

    Benutze bitte immer die passende Highlight-Tags.(z.B: für PHP [php] [/php] Allgemein: [highlight=SCRIPTSPRACHE]Code[/highlight] )

    Problem gelöst? Dann markiere das Thema bitte als erledigt!
    Beachte bitte die Netiquette. Insbesondere Punkt 15.

  4. #4
    lifehunter lifehunter ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Beiträge
    184
    Hab jetzt diese Änderung vorgenommen:
    PHP-Code:
    $now=date("Y-m-d");
    mysql_query("DELETE `inbox` WHERE `date` between '$mailage' and '$now' AND `lesen` IS NOT '0'") or die("error1: " mysql_error());
    mysql_query("DELETE `inbox` WHERE `date` between '$mailold' and '$now'")or die("error2: " mysql_error());
    mysql_query("DELETE `outbox` WHERE `date`between '$mailage' and '$now' AND `lesen` IS NOT '0'") or die("error3: " mysql_error());
    mysql_query("DELETE `outbox` WHERE `date` between '$mailold' and '$now'") or die("error4: " mysql_error()); 
    Er gibt diesen Fehler aus:
    Code :
    1
    
    error1: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `date` between '2005-08-10' and '2005-08-12' AND `lesen`
    Den Fehler finde ich nun trotzdem net
     

  5. #5
    Registriert seit
    Mar 2005
    Ort
    Bühl/Baden
    Beiträge
    2.330
    Soweit ich weiß, muss die Abfrage (nennt man das dort auch so?) bei einem Löschvorgang
    DELETE FROM tabelle WHERE ...
    lautet
     
    Gruß fanste

    Benutze bitte immer die passende Highlight-Tags.(z.B: für PHP [php] [/php] Allgemein: [highlight=SCRIPTSPRACHE]Code[/highlight] )

    Problem gelöst? Dann markiere das Thema bitte als erledigt!
    Beachte bitte die Netiquette. Insbesondere Punkt 15.

  6. #6
    lifehunter lifehunter ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Beiträge
    184
    fehler gefunden:
    PHP-Code:
    mysql_query("DELETE FROM `inbox` WHERE `date` > '$mailage'  AND `lesen` > '0'") or die("error1: " mysql_error());
    mysql_query("DELETE FROM `inbox` WHERE `date` > '$mailold'")or die("error2: " mysql_error());
    mysql_query("DELETE FROM `outbox` WHERE `date` > '$mailage' AND `lesen` > '0'") or die("error3: " mysql_error());
    mysql_query("DELETE FROM `outbox` WHERE `date` > '$mailold'") or die("error4: " mysql_error()); 
    So muss des aussehen.

    So das mit dem löschen geht, aber wie mach ich des mit dem Alter hochzählen? Eben ist mir aufgefallen das ich bei der Abfrage, nach Einträgen suche die zb zwischen 2005-05-01 und 2005-08-12 Geburstag haben.
    Aber eigentlich muss man ja nur nach dem Tag und Monat suchen. Wie mach ich das denn? Also das Gebursdatum ist so in die Datenbank geschrieben
    Beispiel: 2005-08-12
    Wenn jemand ne Lösung hat bitte melden!
    Geändert von lifehunter (12.08.05 um 20:01 Uhr)
     

  7. #7
    Registriert seit
    Nov 2002
    Beiträge
    2.709
    Ich denke, die MySQL-Funktionen MONTH() und DAY(), auf das Feld mit dem Datum angewendet, helfen.
     
    Im Ruhestand.

  8. #8
    lifehunter lifehunter ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Beiträge
    184
    ich habe eben mal nach dieser Funktion gesucht jedoch nix gefunden. Kann man mir da vielleicht jemand weiterhelfen? Am besten ein Beispiel wiedergeben
     

  9. #9
    Registriert seit
    Nov 2002
    Beiträge
    2.709
    Du solltest dringend an deiner Suchtechnik feilen, ich brauchte dafür keine zwei Minuten: MySQL Reference Manual :: 12.5 Date and Time Functions
     
    Im Ruhestand.

  10. #10
    lifehunter lifehunter ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Beiträge
    184
    da hatte ich auch was gefunden. Das hatte ich auch gefunden http://www.little-idiot.de/mysql/mysql-166.html
    Eine gescheite Erklärung ist aber bei beiden irgendwie nicht.
     

  11. #11
    Registriert seit
    Nov 2002
    Beiträge
    2.709
    Doch, eigentlich schon. Du musst sie nur lesen. Was soll an den Funktionen so kompliziert sein?
    Code :
    1
    
    SELECT field_a, field_b FROM table_a WHERE YEAR(field_c) = 1999;
     
    Im Ruhestand.

  12. #12
    lifehunter lifehunter ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Beiträge
    184
    okay ich habe da jetzt was in einem Buch gefunden, aber ich mach da irgendwas falsch:
    Code :
    1
    
    SELECT `ID`, `geb` FROM `userdaten` WHERE `geb`BETWEEN EXTRACT(MONTH | DAY FROM 2005-05-01) and EXTRACT(MONTH | DAY FROM 2005-08-12)
    Also der Fehler liegt irgendwo bei dem MONTH | DAY

    Wenn ich es so mache wird zwar keine Fehler ausgegeben:
    Code :
    1
    
    SELECT `ID`, `geb` FROM `userdaten` WHERE `geb`BETWEEN EXTRACT(MONTH FROM 2005-05-01) and EXTRACT(MONTH FROM 2005-08-12)
    Aber Ergebnisse werden trotzdem nicht gefunden, obwohl es welche geben sollte.
     

  13. #13
    Registriert seit
    Nov 2002
    Beiträge
    2.709
    Ich verschiebe das jetzt einfach mal in das Datenbankenforum...
     
    Im Ruhestand.

  14. #14
    lifehunter lifehunter ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Beiträge
    184
    So ich werd dann mal nach langem rumprobieren die Lösung preisgeben.
    Vorher werd ich noch mal erklären was man damit machen kann:
    Ich habe in der Datenbank das Gebursdatum und das Alter jedes Users stehen.
    Bei ersten Login des Tages wird ein Systemcheck gemacht. Das Datum dieses Systemchecks wird gespeichert, damit falls ein paar Tage niemand online ist, die übergangen Systemchecks nachgeholt werden.

    Bei diesem Systemcheck werden alle User aus der Datenbank gelesen, die seit dem letzten Systemcheck Geburstag hatten und deren Alter um 1 hochgezählt.
    Und so sieht die Auslese der User aus:
    PHP-Code:
    SELECT `ID`,`Nick`,`gebFROM `userdatenWHERE EXTRACT(MONTH FROM `geb`) BETWEEN EXTRACT(MONTH FROM '$check') and EXTRACT(MONTH FROM '".date("Y-m-d")."') AND EXTRACT(DAY FROM `geb`) BETWEEN EXTRACT(DAY FROM '$check') and EXTRACT(DAY FROM '".date("Y-m-d")."'
    Die Var. $check beinhaltet das Datum des letzten Systemchecks.

    Ich hoffe ihr könnt das auch bei euch anwenden.
     

Ähnliche Themen

  1. MySQL-Ausgabe wenn Bedingung erfüllt ist
    Von bloodytriker im Forum PHP
    Antworten: 2
    Letzter Beitrag: 22.06.10, 16:31
  2. Weiterleitung wenn Bedingung erfüllt ist
    Von DrBonsai im Forum PHP
    Antworten: 7
    Letzter Beitrag: 12.03.10, 19:53
  3. Wenn Bedingung erfüllt, Aktion ausführen
    Von creativeheadz im Forum PHP
    Antworten: 1
    Letzter Beitrag: 05.07.09, 19:56
  4. Verlinkung wenn if bedingung erfüllt ist?
    Von fluorescence im Forum PHP
    Antworten: 13
    Letzter Beitrag: 22.09.08, 20:47
  5. Neue auswahl wenn Bedingung erfüllt ist
    Von eternitysoft im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 17.10.05, 02:55