Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] MySqli Update und If Statement Problem

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • prophet
    hat ein Thema erstellt [Erledigt] MySqli Update und If Statement Problem.

    [Erledigt] MySqli Update und If Statement Problem

    Hallo zusammen,

    ich habe ein kleines Problem betreffend mysql Update mit If Bedingung.

    Undzwar soll bei einem Update überprüft werden ob das hinterlegte Datum kleiner ist als das jetztige, wenn dies zutrifft, soll das aktuelle Datum genommen werden [NOW()], wenn nicht das hinterlegte.

    Meine Query:
    PHP-Code:
    UPDATE user SET 
         member 
    "Premium"
         
    expiredate DATE_ADD(IF(expiredate NOW(), NOW(), expiredate), INTERVAL 1 DAYS 
    WHERE 
         ID 
    27 
    EDIT: Das Problem ist, dass die If Bedingung nicht funktioniert!

    Sieht einer das Problem und kann mir erklären was das Problem ist?

    Gruß
    prophet

    Ps.: Ja es wird MySqli mit prepared Statements benutzt

  • prophet
    antwortet
    Ahh damned, hab den Fehler gefunden.
    Meine Query hätte von anfang an funktioniert, wenn ich nicht den Plural von Tag genommen hätte... -.-"
    Was ein Buchstabe aus machen kann...

    Einen Kommentar schreiben:


  • Arne Drews
    antwortet
    Ok, aber sollte es dann nicht mit ein wenig Anpassung machbar sein:
    Code:
    UPDATE
        `user`
    
    SET 
        `member` = 'Premium', 
        `expiredate` = DATE_ADD( NOW(), INTERVAL 1 DAY )
    
    WHERE 
        `ID` = 27
        AND `expiredate` < NOW()
    , das sollte vom Prinzip her expiredate auf Heute + 1 Tag setzen, wenn der Datensatz die ID 27 hat UND expiredate zurückliegt...

    Einen Kommentar schreiben:


  • prophet
    antwortet
    Ok ich formuliere es nochmal anders:

    Dem User sollen eine Anzahl Tage gutgeschrieben werden, dies mache ich mit expiredate = DATE_ADD().
    Wenn jetzt expiredate zB.: 0000-00-00 00:00:00 ist (Was der default-Wert ist), würde der DATE_ADD Teil folgendermaßen aussehen.
    PHP-Code:
    expiredate DATE_ADD("0000-00-00 00:00:00"INTERVAL 1 DAY
    und das würde wieder 0000-00-00 00:00:00 zurückliefern.
    Wenn jetzt das Datum zB 2014-11-23 12:12:12 ist, würde
    PHP-Code:
    expiredate DATE_ADD("2014-11-23 12:12:12 ist"INTERVAL 1 DAY
    2014-11-24 12:12:12 zurückliefern.

    Das Datum das in expiredate gesetzt werden soll, MUSS bei der Query IMMER in der Zukunft liegen, somit bringt das
    Code:
    `expiredate` = NOW()
    nichts.

    Deine Query würde was bringen, wenn ich 2 Requests machen würde, das möchte ich jedoch vermeiden.

    Einen Kommentar schreiben:


  • Arne Drews
    antwortet
    Die Query soll einem User x Tage gutschreiben, also:
    Ich gehe nur nach dieser Aussage:
    Undzwar soll bei einem Update überprüft werden ob das hinterlegte Datum kleiner ist als das jetztige, wenn dies zutrifft, soll das aktuelle Datum genommen werden [NOW()], wenn nicht das hinterlegte.
    , was hier anders formuliert für mich dasselbe aussagt:
    Da jedoch das expiredate auch in der Vergangenheit liegen kann (zB. gestern), und das Datum somit kleiner ist als das aktuelle, soll das jetztige Datum per NOW() genommen werden, wenn das Datum jedoch größer ist, soll das bereits in der Datenbank hinterlegte genommen werden
    Und das erreichst Du mit einem einfachen Konstrukt, ähnlich diesem:
    Code:
    UPDATE
        `user`
    
    SET 
        `member` = 'Premium', 
        `expiredate` = NOW()
    
    WHERE 
        `ID` = 27
        AND `expiredate` < NOW()
    , wobei das jetzt nur als Erklärung dient, und nicht als lauffähig gepostet ist.

    Einen Kommentar schreiben:


  • prophet
    antwortet
    Das ist aber nicht der Sinn der Query.
    Die Query soll einem User x Tage gutschreiben, also:
    PHP-Code:
    DATE_ADD(expiredateINTERVAL 1 DAYS 
    Da jedoch das expiredate auch in der Vergangenheit liegen kann (zB. gestern), und das Datum somit kleiner ist als das aktuelle, soll das jetztige Datum per NOW() genommen werden, wenn das Datum jedoch größer ist, soll das bereits in der Datenbank hinterlegte genommen werden, da es sein kann, dass der User bereits Premiumstatus hat und seinen Account verlängert.

    Einen Kommentar schreiben:


  • Arne Drews
    antwortet
    Na Du setzt einfach expiredate auf NOW() wo die ID passt UND das Datum kleiner ist!

    Einen Kommentar schreiben:


  • prophet
    antwortet
    Ahh verdammt vergessen. Das Problem ist, dass die If Bedingung nicht funktioniert!

    @Arne_Drews:
    Was meinst du soll in die Where Klausel mit rein?

    Einen Kommentar schreiben:


  • Arne Drews
    antwortet
    Warum schiebst Du das nicht einfach in die Where-Klausel mit rein?

    Einen Kommentar schreiben:


  • tkausl
    antwortet
    Was das Problem ist solltest du eigentlich uns erklären, nicht andersrum.

    Einen Kommentar schreiben:

Lädt...
X