MYSQL Abfrageergbnis weiterverarbeiten

  • Hallo,
    ich versuche jetzt seit Wochen verzweifelt eine Lösung für mein Problem zu finden..
    Ich habe in meiner Datenbank eine Tabelle "post_meta". In dieser befinden sich 4 Spalten. in einer Spalte befinden sich Angaben wie Datum, Name, etc. Ich schaffe es die gewünschten Daten zu Filtern und erhalte im Grunde schon ein zufriedenstellendes Ergebnis. ABER:
    Wie kann ich aus diesem Ergebnis weiter Filtern? Sprich ich bekomme im Moment den Kundennamen, Kundenkontakt und ein Erinnerungsdatum. Ich möchte eine Email mit den entsprechenden Daten ausgehend vom Erinnerungsdatum - 100 Tage. Leider kann ich es nicht weiter filtern.

    Hier mal einer meiner vielen Ansätze:
    $sql= "meta_value, post_id FROM di0n8s_postmeta WHERE meta_key='name' OR meta_key='kontakt' OR meta_key='start-datum' OR meta_key='befuellung-neu' ORDER BY post_id";
    $suchdatum = new DateTime("-100 days");
    echo $suchdatum->format("d-m-Y");

    Nur wie bekomme ich das kombiniert oder muss ich mit create temporary table arbeiten?

    Auch das war ein Ansatz:
    $suchdatum = new DateTime("-100 days");
    echo $suchdatum->format("d-m-Y"); (Ergebnis: 16-08-2016 - wäre ja richtig in der Formatierung)
    $query = "SELECT meta_value, post_id FROM wb16_postmeta WHERE meta_key='start-datum'AND DATEDIFF(NOW(), 'post_date') > 11";

    Funktioniert leider auch nicht.. Wo ist denn nur mein Denkfehler?

    Hier meine Tabelle - ein Ausschnitt..

    Wenn ich versuche das Ganze gleich nach Datum zu durchsuchen:

    $suchdatum = new DateTime("-100 days");
    echo $suchdatum->format("d-m-Y");
    $query = "SELECT meta_value, post_id FROM wb16_postmeta WHERE meta_key='start-datum' LIKE '$suchdatum'";

    erhalte ich folgende Fehlermeldung:
    Catchable fatal error: Object of class DateTime could not be converted to string

    Hilfe, ich steh so auf der Leitung..

    Ich hoffe ich konnte mich einigermaßen Verständlich ausdrücken.. ;)

    Über jede Hilfe bin ich dankbar. Google hab ich auch schon befragt, aber mir fehlt einfach der Ansatz..

    Gruß,
    Tanja

  • Wenn dein Datum im Format 16-08-2016 in der Datenbank steht, machst du schon was falsch. Benutze als Datum das Format date, dann steht ein Datum im Format 2016-08-16 in der DB und damit funktionieren auch die Zeitberechnungen von MySQL

  • Vielen Dank für Deine Antwort. Ich hab das Datum im deutschen Datumsformat angegeben..? Es muss doch eine Möglichkeit geben? Die Spalte ist ja auch nicht als Datum angelegt. Ich hab jetzt mal probiert mit Temporären Tabellen zu arbeiten. Aber das Problem der Abfrage bleibt bestehen. Gibt es noch eine Lösung?

  • Alles andere als das richtige Format, also date, führt nur zu unnötiger Rumeierei, damit tust du dir keinen Gefallen.

  • Ich hab ja gar kein Datumsformat sondern nur ein Datum als Text in dieser Formatierung.
    Das heißt ich muss im Grunde alles Neu aufsetzen?
    Gibt es keine Möglichkeit das heutige Datum als Text im Format 24-11-2016 umzuwandeln und dann zu vergleichen?

  • Du musst ja nicht alles neu aufsetzen. Lege eine weitere Spalte mit dem Format date an und dann lässt du das einmal über die Tabelle laufen:

    update `tabelle` set `datum2`=concat(substring(`datum1`,-4), '-', substring(`datum1` from 4 for 2), '-', substring(`datum1` from 1 for 2))

    Wobei datum1 deine Spalte mit dem Textformat ist und datum2 die Spalte mit dem date-Format. Dann noch deine DB-Abfragen im Script anpassen und fertig ist der Lack

    Und bedenke, mit deinem Format ist ein Sortieren nach dem Datum mit einfachen Mitteln nicht möglich

    Einmal editiert, zuletzt von Bandit (24. November 2016 um 17:12)

  • Danke schön. Aber in meiner Spalte stehen ja noch mehr Informationen als das vermeintliche Datum. Zerschieß ich mir dann nicht meine Tabelle?
    Ich frag lieber bevor ich was zerstör. :oops:

    • Offizieller Beitrag

    Hallo,

    Was für Informationen stehen denn noch darin? Auf dem Miniatur-Screenshot ist bspw. bei start_datum nichts weiter zu sehen wie 03-11-2016.
    Dir wurde eine Möglichkeit gezeigt, wie Du eine bessere Basis für Deine Werte bekommst und jetzt sagst Du es stehen noch weitere Informationen darin.

    Hier kann niemand hellsehen, Du musst uns schon die Problemstellen zeigen, damit wir Dir helfen können.
    Bitte gib konkrete Beispiele anhand von Code, bei denen Du nicht weiter kommst, weil es ansonsten hier keinen Sinn hat weiter zu raten.

    Danke und Gruß
    Arne