Videodatenbank

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

  • Videodatenbank

    Problem:

    Ich möchte die Restlaufzeiten der einzelnen Kassetten ermitteln. Es dürfen jedoch nur die Datensätze angezeigt werden, die eine Mindestrestlaufzeit von 60 Minuten erhalten.

    Wie stelle ich das an?

    Tabelle Kassettennr:
    Kassettennr Typ
    5 240
    6 240
    7 240

    Tabelle Filme:
    Kassettennr FilmNr: Titel Laufzeit
    5 1 Sliver 120
    6 1 Stargate 100
    7 1 Pretty Woman 115
    7 2 Der Klient 112

    Für die Hilfestellung im voraus besten Dank.

  • #2
    eine Tabelle reicht aus

    mach doch so

    id = auto
    kassettennr = 1
    kassettenlg = 240
    name1 = xxx
    film1 = 120
    nama2 = xxx
    film2 = 0
    name3 = xxx
    film3 = 0
    name4 = xxx
    film4 = 0
    name5 = xxx
    film5 = 0

    bei der ausgabe einfach

    film1 + film2 + film3 + film4 + film5 - kassettenlg

    Wenn dann rest >60 anzeigen
    Wenn nicht nicht anzeigen

    Mit freundlichen Grüßen
    Werner

    Kommentar


    • #3
      Videodatenbank

      Danke für den Lösungsvorschlag. Stimmt mich jedoch nicht ganz zufrieden: Habe in der Tabelle "Filme" ja noch weitere Informationen wie Darsteller, Regie, Filminfo etc.
      D.h. für jeden Film habe ich bereits einen Datensatz angelegt.

      Meine Anfrage lautet nun wie folgt:
      $anfrage="select f.cassettennr,f.filmnr,f.Titel,f.laufzeit,k.id,k.typ from $table f, $table1 k where (f.cassettennr=k.id) group by f.cassettennr ORDER BY k.id;";

      Aus diesen Angaben soll nunmehr die Restlaufzeit ermittelt werden.

      Vielleicht hilft dies ja weiter.

      Mike


      Kommentar


      • #4
        Theoretisch müßte es so funktionieren:
        $anfrage="select (k.typ-f.laufzeit) as rest, f.cassettennr,f.filmnr,f.Titel,f.laufzeit,k.id,k.typ from $table f, $table1 k where f.cassettennr=k.id AND rest < 60 group by f.cassettennr ORDER BY k.id;";

        [Editiert von hand am 17-01-2002 um 12:30]

        Kommentar


        • #5
          Leider Fehlanzeige:

          Fehlermeldung=Unknown column 'rest' in 'where clause'

          Hier meine bisher erarbeitete Lösung:
          $db = mysql_select_db("filmarchiv", $connection) or die ("Couldn't select database");
          $table = filme;
          $table1= kassettennr;
          $SQL = " SELECT COUNT(*) AS cnt FROM $table";
          $QUERY = mysql_query($SQL) or die("<select> QUERY FAILED! $SQL");
          $totalRecords = mysql_result($QUERY,0,"cnt");
          $anfrage="select f.cassettennr,f.filmnr,f.Titel,f.laufzeit,k.id,k.typ from $table f, $table1 k where (f.cassettennr=k.id) group by f.cassettennr ORDER BY k.id;";
          $ergebnis=mysql_query($anfrage) or die
          ("Fehlermeldung=".mysql_error());
          $anzahl=mysql_num_rows($ergebnis);
          echo "Es wurden <b>$anzahl</b> Videokassetten gefunden!!!<hr>";
          echo" <table><tr><td>";
          while ($row=mysql_fetch_row($ergebnis))
          {
          $restlaufzeit=$row[5]-($row[3]);

          if ($cassette=(($row[1]!=1) and ($row[1]==2)) && ($restlaufzeit>=60))
          {
          echo "Kassette Nr. $row[0]: $restlaufzeit min<br>";
          }
          else
          echo "Kassette Nr. $row[0] ist voll!!!<br>";
          }

          Leider ist hier das Ergebnis nicht korrekt. Kassette Nr. 5 hat 2 Filme, also insgesamt 240 Minuten Laufzeit. Stimmt etwas mit meiner Syntax nicht?

          Mike

          Kommentar


          • #6
            $anfrage="select (k.typ-f.laufzeit) as rest, f.cassettennr,f.filmnr,f.Titel,f.laufzeit,k.id,k.typ from $table f, $table1 k where f.cassettennr=k.id AND 1 < 60 group by f.cassettennr ORDER BY k.id;";

            1 steht für erste Spalte im Select, probier es bitte einmal

            (Aber ganz traue ich der Syntax noch nicht, der Versuch ist es aber Wert. Ich konnte einmal ein Problem bei mir lösen im Zusammnehang mit ORDER BY 1, ist natürlich ein anderer Fall als der 1er in der WHERE Bedingung)

            [Editiert von hand am 17-01-2002 um 14:16]

            Kommentar


            • #7
              Nachdem im Handbuch steht: "Functions for use in SELECT and WHERE clauses", aber dort keine Funktionen betreffend WHERE Bedingung angegeben werden könnte es sein, daß folgende Syntax für den SELECT auch für WHERE funktioniert:

              $anfrage="select (k.typ-f.laufzeit) as rest, f.cassettennr,f.filmnr,f.Titel,f.laufzeit,k.id,k.typ from $table f, $table1 k where f.cassettennr=k.id AND (k.typ-f.laufzeit) < 60 group by f.cassettennr ORDER BY k.id;";

              Aber bitte teste zuerst die zuvor gepostete Variante mit 1 < 60

              Kommentar


              • #8
                Danke, Versuch ist gelungen, es erfolgt nun keine Fehlermeldung mehr auf Posting 1. Posting 2 habe ich auch auspropiert. Ebenfalls keine Fehler.

                Jetzt möchte ich natürlich noch die Ausgabe der Kassettennummer und der entsprechenden Restlaufzeit ausgegeben haben. Wie muß die Ausgabe dann erfolgen?

                Ansonsten darf ich mich schon mal jetzt für die Hilfe und Bemühungen bedanken. Ich hoffe, daß ich mich auch bald mal revanchieren kann.

                Mike

                Kommentar


                • #9
                  Würde Syntax von 2 verwenden, diese dient sicher mehr der Lesbarkeit und der Möglichkeit später bei Wartungsarbeiten nachzuvollziehen was der select eigentlich soll.

                  Kommentar


                  • #10
                    $anfrage="select k.id,k.typ,(k.typ-sum(f.laufzeit)) as rest from $table f left join $table1 k on f.cassettennr=k.id group by k.id having rest>60 ORDER BY k.id";
                    mein Sport: mein Frühstück: meine Arbeit:

                    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                    Kommentar


                    • #11
                      Danke für die bisherige zahlreiche Unterstützung und die Mühe, sich mit meinem Problem zu befassen. Habe die Lösungen auch alle probiert und immer was neues hinzugelernt.
                      Die Lösung von Titus hat mir am besten gefallen und habe sie bereits im Einsatz.

                      Ich werde das Forum auf jeden Fall weiterempfehlen. 1. Es macht Spass, immer neues hinzuzulernen.
                      2. Die Hilfsbereitschaft.
                      3. Das Engagement.

                      Würde mich freuen, wenn´s so bleibt und verfolge natürlich weiter, was es hier so für Probleme gibt. Vielleicht sogar mal mit einem Lösungsansatz von mir?! Wer weiß.

                      Also noch einen schönen Abend und viel spass beim coden.

                      Mike

                      Kommentar

                      Lädt...
                      X