select max geht nicht so richtig

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

  • select max geht nicht so richtig

    hallo, ich versuche mir gerade eine datenbank für meine cds zu basteln. klappt auch alles soweit. nun möchte ich mir noch eine playlistfunktion mit einbauen. soll heissen, wenn ich songs aus der datenbank ausgelesen habe, dass die dann separat in eine liste eingefügt werden.
    klappt auch alles.
    nun möchte ich aber später diese ausgabe der playlist ändern können, soll heissen z.b. der song an stelle 2 soll nun an stelle 1 stehen.
    bisher habe ich mir eine extraspalte namens playlist mit phpmyadmin eingefügt und überall wird der wert 1 eingetragen. also damit wird dann eben erkannt, dass die zeile/datensatz auf der übersichtsseite der playlist angezeigt wird. wenn ich aber später die reihenfolge ändern möchte geht das mit der 1 ja nicht. nun wollte ich das so haben, dass zuerst in die spalte playlist die 1 eingetragen wird und dann die 2, die 3 usw,
    aber eben nur dann, wenn es auch logischweise drei songs sind die ich in der playlist haben möchte.
    vom gedankengang dachte ich schaue in der spalte playlist nach wo der höchste wert ist. nimm den und zähle 1 hinzu. also wenn ich drei einträge drinhabe soll der nächste eintrag die zahl 4 erhalten.
    aber irgendwie klappt das nicht.
    er fügt mir in die spalte playlist nun bei dem jeweiligen song zuerst eine 2 ein. beim nächsten song eine 4 obwohl es nur zwei song dann wären.
    also er geht in zweierschritten.
    hier mal meine tabelle und mein abfrageskript.


    PHP-Code:
    CREATE TABLE `audiocd` (
      `
    idint(11NOT NULL auto_increment,
      `
    nrsmallint(4unsigned zerofill NOT NULL default '0000',
      `
    titeltext NOT NULL,
      `
    interprettext NOT NULL,
      `
    songnametext NOT NULL,
      `
    songlaengevarchar(5NOT NULL default '',
      `
    verliehentext NOT NULL,
      `
    bemerkungtext NOT NULL,
      `
    imarchivseittext NOT NULL,
      `
    playlisttext NOT NULL,
      
    PRIMARY KEY  (`id`)
    TYPE=MyISAM PACK_KEYS=0 AUTO_INCREMENT=355 
    PHP-Code:
    <?php
    $id 
    $HTTP_GET_VARS["id"];
    $playlisthinzu $HTTP_GET_VARS["playlisthinzu"];
    if(
    $playlisthinzu == "1") {
    include(
    "include/config.inc.php");
    include(
    "include/connect.inc.php");

    $hoechstereintragplaylist=mysql_query("select MAX(playlist) FROM audiocd");
    $g=mysql_result($hoechstereintragplaylist,0,0);
    $g++;

    $eintrag "UPDATE audiocd SET playlist='$g' WHERE id = '$id' ";
    mysql_query($eintrag) or die(mysql_error());

    $meldung_1="Song wurde zur Playlist hinzugef&uuml;gt!";
    unset(
    $id,$playlisthinzu);
    }
    else {
    $meldung_2="";
    }
    ?>
    hoffe, dass mir jemand weiterhelfen kann.
    irgendwo muss da der wurm drin sein.
    schonmal danke im voraus! :-)
    Zuletzt geändert von marcello2000; 18.05.2005, 21:15.

  • #2
    erst einmal das hier lesen und umsetzen!
    http://www.php-resource.de/forum/sho...threadid=47906

    und dann macht es für mich keinen sinn, dass du das feld playlist, in dem eh nur nummern rein sollen, vom type text hast. damit wird MAX() auch nicht funktionieren.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      sorry, aber ich kenne mich damit eben noch nicht so aus.
      wenn max mit dem typ text nicht funktioniert, welchen typ muss man dann angeben?

      Kommentar


      • #4
        was willst du denn reinschreiben ?

        was würdest du dann für einen typ nehmen? tipp: www.mysql.com oder auch schattenbaum.net
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          dann würde ich tinyint nehmen.

          ist das der ganze fehler in dem skript weshalb er in zweier schritten hochzählt?

          Kommentar


          • #6
            Original geschrieben von marcello2000
            dann würde ich tinyint nehmen.
            schon probiert?

            Original geschrieben von marcello2000
            ist das der ganze fehler in dem skript weshalb er in zweier schritten hochzählt?
            schon probiert?


            ps. du hast noch vergessen den table-create-dump in [code]-tags zu setzen.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              ja habe es mit tinyint versucht.
              ist genau wie vorher.
              in die spalte playlist wird eine 2 eingetragen.
              füge ich noch einen song zur playlist hinzu bekommt die den wert 4.
              versteh ich nicht.

              Kommentar


              • #8
                weiss denn keiner eine antwort???

                Kommentar


                • #9
                  macht marcello2000 denn keinerlei debugging???
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    sorry ich schrieb hier schon. dass ich mich noch nicht so gut auskenne.
                    wie funktioniert debugging?

                    Kommentar


                    • #11
                      Original geschrieben von marcello2000
                      wie funktioniert debugging?
                      *seufz*

                      kontrollausgaben an verschiedenen stellen - steht in den variablen auch das drin, was du erwartest ...?
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        habe es eben mit var_dump versucht.
                        klappt alles.
                        ich bekomme keine fehlermeldung.
                        es wird einfach statt einer 1 eine 2 eingetragen und dann die 4 und so weiter.
                        sieht man denn keinen fehler in meinem skript?????

                        wenn ich ne fehlermeldung hätte, dann hätte ich die schon längst gepostet.

                        es muss doch möglich sein, eine spalte in sql auszulesen davon den höchsten wert ermitteln und diesen um eins erhöhen und diesen erhöhten wert dann wieder in ein neues feld einzutragen.

                        in der ausgelesenen spalte mit der höchsten zahl stimmt alles,
                        er erhöht auch um eins.
                        nur dann wenn er es zurückschreiben soll macht er anscheinend nochmal +1.
                        Zuletzt geändert von marcello2000; 19.05.2005, 18:52.

                        Kommentar


                        • #13
                          Du willst also, bei einem neuen Eintrag, dass dieser den letzten Eintrag im Feld Playlist (welches in der tat sinnvollerweise vom Typ Int oder tinyint sein sollte) um einen Hochzählt.

                          Du führst aber derzeit ein update auf einen bestehenden Eintrag aus.

                          Will sagen:
                          du ziehst dir : max(playlist) (beispielsweise die "1" weil: erster Eintrag)

                          zählst den wert um 1 hoch (macht dann: 2)

                          Änderst den Datensatz an position "$id" durch den hochgezählten wert.
                          (da du nur einen Eintrag in der Tabelle hast, wird das update entweder fehlschlagen, oder den Wert 1 nach 2 ändern)

                          im Besten Fall setzt du somit den Eintrag an Position "$id" ans ende der Tabelle, wenn du nach "playlist" sortierst.

                          oder:
                          ich hab nicht gepeilt was du mit dem code eigentlich vorhast....

                          Kommentar

                          Lädt...
                          X