Ankündigung

Einklappen
Keine Ankündigung bisher.

eigene Funktionen in sql-queries?

Einklappen

Neue Werbung 2019

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

  • eigene Funktionen in sql-queries?

    Hallo, hab folgendes Problem - Hab eine Funktion "gebastelt", die aus einem Unix timestamp die Angabe des Monats und des Jahres "produziert", also Bsp. "Januar 2005".

    Besagte Funktion habe ich monatsauswahl_timestamp_generieren() genannt - und sie funktioniert, wie ein Test an anderer Stelle bewiesen hat.

    Nun will ich, dass alle Einträge mit besagtem Timestamp ausgegeben werden, d.h. alle Einträge, die sich auf den Januar 2005 beziehen.

    Das sql-query schaut bei mir folgendermaßen aus:

    Code:
    $abfrage2 = "SELECT * FROM wartungseinsaetze WHERE md5(Kunde) = '$ID' && monatsauswahl_timestamp_generieren(Start) = 'Januar 2005' ORDER BY Start";
    		
    $ergebnis2 = mysql_query($abfrage2);
    		
    while($row2 = mysql_fetch_object($ergebnis2))
    		
    				{
    und so weiter...

    Beim Ausführen bekomm ich nun die Fehlermeldung

    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /kunden/rich-praezision.de/webseiten/pronexon/view_wv.php on line 37

    wobei sich Zeile 37 auf

    Code:
    while($row2 = mysql_fetch_object($ergebnis2))
    bezieht...

    Kann es sein, dass ich in sql-queries keine eigenen Funktionen verwenden darf?

    Danke für eure Hilfe,

    liebe Grüße - Christian

  • #2
    Du kannst nicht wahl(sinn)los PHP und SQL durcheinanderwürfeln.

    Kommentar


    • #3
      ...ich dachte, md5() ist auch eine php-Funktion...

      Kommentar


      • #4
        ja, aber eben auch eine mysql funktion. Mysql hat eine menge funktionen, viele gibts auch bei php und umgekehrt, aber sie werden halt seltener benutzt...

        Kommentar


        • #5
          mach einfach die variable start

          PHP-Code:
          <?php
          $start 
          monatsauswahl_timestamp_generieren(Start);
          $abfrage2 "SELECT * FROM wartungseinsaetze WHERE md5(Kunde) = '$ID' && $start = 'Januar 2005' ORDER BY Start";
                
          $ergebnis2 mysql_query($abfrage2);
                
          while(
          $row2 mysql_fetch_object($ergebnis2))
                
                      {
          ?>
          mfg Andi

          Kommentar


          • #6
            Gibts dann auch eine Möglichkeit, eine mysql-Funktion zu definieren?
            Ich weiß sonst echt nicht, wie ich mein "Problem" lösen sollte...

            Kommentar


            • #7
              is doch net kompliziert.

              Du erzeugst mit php den start- und endtimestamp vom januar 2005 und guckst nach, ob der timestamp in der db dazwischen is.

              Kommentar


              • #8
                mach einfach die variable start

                PHP:

                <?php
                $start = monatsauswahl_timestamp_generieren(Start);
                $abfrage2 = "SELECT * FROM wartungseinsaetze WHERE md5(Kunde) = '$ID' && $start = 'Januar 2005' ORDER BY Start";

                $ergebnis2 = mysql_query($abfrage2);

                while($row2 = mysql_fetch_object($ergebnis2))

                {
                ?>




                mfg Andi
                Nein, das funktioniert so nicht - Gedacht war ja, dass quasi von jedem Eintrag in der DB der $start = monatsauswahl_timestamp_generieren()-Wert generiert wird...

                Hat keiner eine Idee?
                Das Einzige, was mir jetzt noch einfallen würde (wenn auch weniger elegant), ist, dass beim Eintragen in die Datenbank in ein separates Feld besagter Monats-Timestamp im Klartext geschrieben wird...

                Kommentar


                • #9
                  also meiner ansicht nach ist das nicht weniger ellegant.. ob du nun vor oder nach der ausgabe den monat ermittelst ist doch egal, oder?

                  Kommentar


                  • #10
                    mysql 5 kennt stored procedures und stored functions.
                    Brauchst Du aber wahrscheinlich nicht.

                    && monatsauswahl_timestamp_generieren(Start) = 'Januar 2005' ORDER BY Start"
                    Der php Code von monatsauswahl_timestamp_generieren sieht wie aus?
                    Welchen Feldtyp hat Start? Falls kein Datumswert: Warum ist es kein Datumswert?

                    Kommentar


                    • #11
                      die Funktion nimmt die date() Funktion von php und formt damit ein wenig einen Unix Timestamp um, also keine große Sache.
                      Danach werden Monat, Jahr und die Leerzeile als String zusammengebastelt und ausgegeben.

                      Der Feldtyp in der Datenbank ist integer

                      Kommentar


                      • #12
                        Der Feldtyp in der Datenbank ist integer
                        Schade, kein Datumswert. Naja, dafür gibt es sicher einen Grund.
                        Mit From_unixtime kann daraus sicherlich ein Wert erstellt werden, mit dem mysql rechnen kann.
                        Was ist 'Januar 2005'? Zwischen 1.1.2005 und 31.1.2005 inklusive?
                        Das kann mysql gerade noch.
                        WHERE From_unixtime(`Start`) BETWEEN '2005-01-01' AND '2005-01-32' ORDER BY `Start`

                        Kommentar

                        Lädt...
                        X