Announcement

Collapse
No announcement yet.

MySQL-Abfrage auf tiefste freie Zahl bringt in PHP kein Ergebnis

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MySQL-Abfrage auf tiefste freie Zahl bringt in PHP kein Ergebnis

    Originally posted by Falk Prüfer View Post
    Also als Erstes: eine separate Spalte für die Filmnummer anlegen!
    Hi Falk!

    Danke für deinen Rat, den habe ich mir sogleich zu Herzen genommen und eine neue Spallte namens "Nummero" gemacht. Die Zahlen habe ich dann von der ID Spalte in die Nummero Spalte importiert.

    Dann bin ich auf einem Script gestossen was im MySQL Dumper (Webbasiertes MySQL Programm) auf mein gewünschtes ergebnis gebracht hat :-)

    PHP Code:
    SELECT min(Nummero 1FROM Filme WHERE Nummero 1 NOT IN (SELECT Nummero FROM Filme
    Hiermit wird die tiefste Freie Zahl meiner Nummerierung ausgegeben, genau so wie ich es eigentlich haben will.

    ABER:
    Wenn ich diesen Script in mein Webprojekt durchlaufen lasse, wird diese Meldung ausgegeben:

    Resource id #7
    Das hab ich mal gegoogelt und gelesen das man diese Abfrage noch in einem fetch script laufen lassen soll. Aber ausgegeben wird bei mir nichts!

    Das gibt nichts aus:

    PHP Code:
    $result mysql_query("SELECT min(Nummero + 1) FROM Filme WHERE Nummero + 1 NOT IN (SELECT Nummero FROM Filme)");
    while (
    $row mysql_fetch_object($result)) {
        echo 
    $row->Nummero;

    Das gibt Resource id #7 aus:

    PHP Code:
    echo mysql_query("SELECT min(Nummero + 1) FROM Filme WHERE Nummero + 1 NOT IN (SELECT Nummero FROM Filme)"); 
    Ich bin ein Anfänger und vielleicht übersehe ich ja nur was kleines.

    Wie gesagt wenn ich diese MySQL SELECT Abfrage im MySQL Client ausführe, wird mir das richtige ausgegeben, nur im Webbrowser nicht (natürlich mit korrekter DB Anbindung).

    Was mache ich falsch?

    Danke schon im Voraus für die Feedbacks!
    Zuletzt editiert von Publisher; 01.02.2012, 13:11. Reason: (Gelöst)

  • #2
    Schon mal

    $row = mysql_fetch_row($result);
    echo $row->Nummero;
    probiert
    Christian

    Comment


    • #3
      Originally posted by Publisher View Post
      Das gibt nichts aus:

      PHP Code:
      $result mysql_query("SELECT min(Nummero + 1) FROM Filme WHERE Nummero + 1 NOT IN (SELECT Nummero FROM Filme)");
      while (
      $row mysql_fetch_object($result)) {
          echo 
      $row->Nummero;

      Dann würde ich mal das Error-Reporting hochschrauben, es sollte nämlich der Fehler kommen das $row->Nummero nicht existiert.

      Dein Resultset enthält schlicht und einfach keine Spalte Namens Nummero (allenthalb eine Spalte Namens min(Nummero + 1)).

      Nutze Aliasbezeichner.
      Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

      Comment


      • #4
        Originally posted by Christian Marquardt View Post
        Schon mal

        $row = mysql_fetch_row($result);
        echo $row->Nummero;
        probiert
        Wird nicht funktionieren, da mysql_fetch_row() kein Object liefert.
        Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

        Comment


        • #5
          Originally posted by Christian Marquardt View Post
          Schon mal

          $row = mysql_fetch_row($result);
          echo $row->Nummero;
          probiert
          Wird leider auch nichts ausgegeben.

          Originally posted by dibo33 View Post
          Dann würde ich mal das Error-Reporting hochschrauben, es sollte nämlich der Fehler kommen das $row->Nummero nicht existiert.

          Dein Resultset enthält schlicht und einfach keine Spalte Namens Nummero (allenthalb eine Spalte Namens min(Nummero + 1)).

          Nutze Aliasbezeichner.
          Habe Probiert das mit Aliases zu machen gemäss http://dev.mysql.com/doc/refman/5.1/...ith-alias.html aber habs noch nicht hinbekommen.

          Stimmt das überhaupt hier?:

          PHP Code:
          $resultZwei mysql_query("SELECT min(Nummero + 1) AS mindestNummerPlusEins FROM Filme WHERE (Nummero + 1) AS NummerPlusEins NOT IN (SELECT Nummero FROM Filme)");
          while(
          $rowZwei mysql_fetch_object($resultZwei)) {
          echo 
          $rowZwei->Nummero."\n";
          }
          echo 
          "<br />Error Code: ".mysql_errno()."\n"
          Damit bekomme ich fehlermeldung:

          Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in URL[...]/httpdocs/inserire.php on line 39

          Error Code: 1064

          Comment


          • #6
            Leute, wenigsten die minimalsten Grundlagen kann man doch vorher erlernen.

            Code:
            WHERE (Nummero + 1) AS NummerPlusEins
            In der WHERE-Klausel gehören keine Aliasbezeichner, das ist syntaktisch schon mal falsch.

            Code:
            echo $rowZwei->Nummero
            Du hast immer noch keine Spalte Nummero im Resultset, allerhöchstens eine Spalte mindestNummerPlusEins (nachdem du das Statement fehlerfrei hinbekommen hast).
            Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

            Comment


            • #7
              Hallo,
              Originally posted by Publisher View Post
              ...Dann bin ich auf einem Script gestossen was im MySQL Dumper (Webbasiertes MySQL Programm) auf mein gewünschtes ergebnis gebracht hat :-)

              PHP Code:
              SELECT min(Nummero 1FROM Filme WHERE Nummero 1 NOT IN (SELECT Nummero FROM Filme
              Hiermit wird die tiefste Freie Zahl meiner Nummerierung ausgegeben, genau so wie ich es eigentlich haben will.
              Du solltest dir darüber im Klaren sein, dass das NICHT Mehrbenutzerfähig ist! (Zumindest nicht ohne aufwändiges Locking)

              Gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                Originally posted by dibo33 View Post
                Leute, wenigsten die minimalsten Grundlagen kann man doch vorher erlernen.

                Code:
                WHERE (Nummero + 1) AS NummerPlusEins
                In der WHERE-Klausel gehören keine Aliasbezeichner, das ist syntaktisch schon mal falsch.

                Code:
                echo $rowZwei->Nummero
                Du hast immer noch keine Spalte Nummero im Resultset, allerhöchstens eine Spalte mindestNummerPlusEins (nachdem du das Statement fehlerfrei hinbekommen hast).
                Yeee danke vielmals, habe es jetzt hingekriegt.

                Das funktioniert.

                PHP Code:
                $resultZwei mysql_query("SELECT min(Nummero + 1) AS mindestNummerPlusEins FROM Filme WHERE Nummero+1 NOT IN (SELECT Nummero FROM Filme)");
                while(
                $rowZwei mysql_fetch_object($resultZwei)) {
                $tiesteFreieZahl $rowZwei->mindestNummerPlusEins."\n";

                Danke an alle!

                Comment


                • #9
                  Schade bin wohl zu spät,
                  aber ich würde vorher mal empfehlen:

                  PHP Code:
                  print_r($row); 
                  zum machen, damit man sieht wie der Key heißt....
                  und dieser heißt dann wohl: 'min(Nummero + 1)'.

                  2. Tipp: Mach das durch mysql_fetch_assac, damit du es per Array und nicht als Objekt übergibst, was das script etwas schneller macht.

                  Dann sollte es aber heissen:
                  PHP Code:
                  $resultZwei mysql_query("SELECT min(Nummero + 1) AS mindestNummerPlusEins FROM Filme WHERE Nummero+1 NOT IN (SELECT Nummero FROM Filme)"); 
                  while(
                  $rowZwei mysql_fetch_assoc($resultZwei))
                  $tiesteFreieZahl[] = $rowZwei['mindestNummerPlusEins']."\n"
                  Nicht getestet...

                  Comment


                  • #10
                    Originally posted by MyZeD View Post
                    Schade bin wohl zu spät,
                    aber ich würde vorher mal empfehlen:

                    PHP Code:
                    print_r($row); 
                    zum machen, damit man sieht wie der Key heißt....
                    und dieser heißt dann wohl: 'min(Nummero + 1)'.

                    2. Tipp: Mach das durch mysql_fetch_assac, damit du es per Array und nicht als Objekt übergibst, was das script etwas schneller macht.

                    Dann sollte es aber heissen:
                    PHP Code:
                    $resultZwei mysql_query("SELECT min(Nummero + 1) AS mindestNummerPlusEins FROM Filme WHERE Nummero+1 NOT IN (SELECT Nummero FROM Filme)"); 
                    while(
                    $rowZwei mysql_fetch_assoc($resultZwei))
                    $tiesteFreieZahl[] = $rowZwei['mindestNummerPlusEins']."\n"
                    Nicht getestet...
                    Dankesehr für deine Tipps!

                    Comment

                    Working...
                    X