where Abfrage

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

  • where Abfrage

    Hallo,

    ich habe ein Selectfeld mit einer jahresangabe.

    $timeform .= '<select name="year" ><option value="0"></option>';
    for( $i = 2002; $i <= 2025; $i++ )
    {
    $timeform .= '<option value="' . $i . '"' . ( $i == $year ? ' selected' : '' ) . '>' . $i . '</option>';
    }
    $timeform .= '</select>';

    In der Datenbank ist das Datum (dateday) mit 0000-00-00 abgespeichert.

    Jetzt möchte ich eine Auflistung, wo alle Einträge aufgezählt sind,
    die z.B. das Jahr 2003 haben.

    SELECT DISTINCT ........, date.dateday, ...... FROM tabelle1 As user, tabelle2 As date WHERE user.userid=date.userid AND substr(date.dateday,0,4)=$year ORDER BY date.dateday " );

    Der Fehler liegt sicherlich beim substring??


    EDIT
    Ich habe zum testen dieses eingefügt, und mich somit auf einen
    bestimmten Datenbankeintrag bezogen:

    AND date.dateday = 2003-06-13

    bekomme aber trotzdem alle Datenbankeinträge angezeigt ???

    muß natürlich '2003-06-13' heißen, dann klappts, also Fehler
    doch im substring?

    /EDIT

    Gruß
    Heiner
    Zuletzt geändert von Heiner; 28.06.2002, 13:29.

  • #2
    probier doch mal

    ...AND substr(date.dateday,0,4)='2003'...

    dann wießt du zumindest, ob es am substr() liegt.
    eval(str_pad(aa|db,4,slarti^~äü_i_)." \"áú¾ïùû䶳Ðäýï©üèíþç£þé\"^~\"no bugs, only features\";");

    Kommentar


    • #3
      Hallo,

      nach deinem Beispiel:
      AND substr(date.dateday,0,4)='2003'

      kommt das hier:

      MySQL: You have an error in your SQL syntax
      near '(date.dateday,0,4) = '2003' ORDER


      gebe ich zum Testen ein:
      AND date.dateday = '2003-06-13'

      dann funktioniert es, es wird dieser Datensatz angezeigt.

      EDIT
      Noch ein Test:

      $test = substr(date.dateday,0,4);

      im Abfrage string: AND $test='2003'

      Fehlermeldung: Unknown column 'date' in 'where clause'

      das gibt dann "date" aus, es wird als das Wort zerlegt,
      bei 0,2 wir "da" ausgegeben, und nicht der Wert der Spalte??

      bei :
      $test = intval(substr(date.dateday,0,4));
      wird "0" ausgegeben.


      Zuletzt geändert von Heiner; 28.06.2002, 19:32.

      Kommentar


      • #4
        Falls es bei der oberen keine Lösung gibt, bin
        ich da jetzt etwas anders herangegangen.

        Dazu muß ich aber das Format aus der Datenbank 0000-00-00
        umwandeln in einem Timestamp 0000000000

        Wie kann man das machen?

        Kommentar


        • #5
          1. Du speicherst in die Datenbank gleich den Timestamp rein
          $time=time();

          2. Du wandelst mit dateformat das datum um.

          Bei 2 bin ich mir net sicher bin anfänger.
          __________________________
          __________________________

          Kommentar


          • #6
            Edit:

            Aber es müsste doch auch mit LIKE gehen oder?

            $select = ("SELECT * FROM deine_tabelle_oder_auch_nicht_grins LIKE 2003%");
            mysql_query($select,$verbindung);
            __________________________
            __________________________

            Kommentar


            • #7
              Das Feld dateday ist welchen Feldtyps? Etwa Character?
              Wenn ja solltest Du nach DATE konvertieren.
              Wenn es sich um DATE oder DATETIME handelt stehen Dir doch alle datumspezifischen Abfrage- und Berechnungsmöglickeiten zur Verfügung.

              Die Abfrage könnte dann wie folgt aussehen:

              SELECT DISTINCT ........, date.dateday, ...... FROM tabelle1 As user, tabelle2 As date WHERE user.userid=date.userid AND YEAR(date.dateday)=$year ORDER BY date.dateday " );

              http://www.mysql.com/doc/D/a/Date_an...functions.html
              http://www.mysql.com/doc/D/A/DATETIME.html

              Ansonsten würde ich mal den substring() wie folgt probieren:

              .... AND substring(date.dateday,1,4) = '2003' ...

              1. In der Select-Anweisung substring() anstatt substr().
              2. Der SQL-Substring ist nicht nullrelativ!

              http://www.mysql.com/doc/S/t/String_functions.html
              Zuletzt geändert von hand; 29.06.2002, 12:26.

              Kommentar


              • #8
                Vielen Dank für die Hilfe, jetzt habe jedoch bereits alles
                umgeschrieben und die Auflistung von Terminen nach
                Monat und Jahr über eine checkbox namens "period gemacht.
                Auf der Seite habe ich 2 selectfelder, Monat und Jahr.

                So habe ich es versucht, searchstart und searchend funktionieren
                und geben den richtigen Zeitpunkt aus.

                Nur das Datum in der Datenbank 0000-00-00 wird immer
                noch nicht in einen Timestamp umgewandelt 0000000000

                if( $period == "yes" )
                {
                $searchstart = mktime(0, 0, 0, $startmonth, 1, $startyear);
                $searchend = mktime(0, 0, 0, $startmonth + 1, 0, $startyear);
                $date = mktime(0, 0, 0, substr(date.dateday, 5,2), substr(date.dateday, 8,2), substr(date.dateday, 0,4));

                $zusatz = "AND ($date>$searchstart AND $date<$searchend)";

                Kommentar


                • #9
                  nochmal umgeschrieben:
                  so gehts auch, ohne das Datum der Datenbank umzuwandeln.

                  if( $period == "yes" )
                  {
                  $searchstart = sprintf ("%04d-%02d-%02d", $startyear, $startmonth, 1);
                  $searchend = sprintf ("%04d-%02d-%02d", $startyear, $startmonth + 1, 1);

                  $zusatz = "AND (date.dateday>$searchstart AND date.dateday<$searchend)";

                  }

                  dabei kommt heraus:

                  AND (date.dateday>2002-01-01 AND date.dateday<2002-02-01)

                  also ist jetzt bei date.dateday der Fehler.

                  Kommentar


                  • #10

                    @Heiner: Nur leider ist ein solche Vorgehen absolut nicht sinnvoll ... ein RDBMS gibt uns Datentypen, die für die Verwaltung entsprechender Daten auch verwendet werden sollten ...

                    ... und wenn Du schon Strings vergleichen willst ... dann so:

                    PHP-Code:
                    $zusatz "AND (date.dateday>'$searchstart' AND date.dateday<'$searchend')"
                    carpe noctem

                    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                    Kommentar


                    • #11
                      @goth

                      Vielen Dank,

                      jetzt funktioniert es.

                      Ich bin da noch am Anfang mit meinen Scripten,
                      deshalb weiß ich auch nicht genau welches
                      Vorgehen nun das Beste ist.

                      Ich hoffe diese nun endlich funktionierende
                      Variante der selektierten Auflistung von
                      Datenbankeinträgen verursacht keine Probleme.

                      Kommentar

                      Lädt...
                      X