mysql_fetch_array Fehler

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

  • mysql_fetch_array Fehler

    Hi,

    meine Situation ist folgende, ich habe eine Tabelle in der Einträge von Benutern stehen. Nun kann es vorkommen, dass ein Benutzer doppelt Einträge in die Tabelle setzt. Gemäß dem Fall soll der ältere Eintrag gelöscht werden. Dafür verwende ich folgenden Query: "SELECT making_id FROM table WHERE user_id='$id' "
    making_id ist ein AUTO_INCREMENT Wert. So weit so gut, mysql_num_rows gibt 2 aus, was bestätigt, dass der Query 2 Einträge des selben Benutzers erfasst hat. Nun will ich mit mysql_fetch_array diese beiden making_id's erfassen um dann mit sort() die höchste ID (ergo der neuste Eintrag) als erste Element im Array zu haben und das letzte Element (die geringere ID = älterer Beitrag) löschen. Soweit komme ich aber gar nicht, weil mysql_fetch_array nicht mitspielt. Es selektiert nur die erste making_id in der Tabellenreihenfolge und gibt die auch noch doppelt aus. Wie also kann ich beide making_id's erfassen?

  • #2
    ich glaub schon das da myql_fetch_array mitspielt, wenn man es richtig anwendet.
    ich würde es nicht mit sort machen. sondern lieber in die query gleich die ordnungs bestimmen:

    SELECT making_id FROM table WHERE user_id='$id' order by ID DESC
    ...
    ...
    $daten=mysql_fetch_array($resource);
    ...ausgabe..
    $daten=mysql_fetch_array($resource);

    delete from table where user_id='$id' and making_id='$daten["making_id"]'

    so irgendwie..
    meine Projekte bestaunen: http://www.kleiza.de

    Kommentar


    • #3
      Zeig mal wie Du das gecodet hast, vielleicht liegt da der Hund begraben.

      Kommentar


      • #4
        Ich denk mal ich hab ne adäquate Lösung gefunden, zumindest funktioniert sie.

        connect_and_select_db($GLOBALS[server], $GLOBALS[user], $GLOBALS[database]);
        $var_4 = "SELECT * FROM $GLOBALS[tabelle_4] WHERE $GLOBALS[field_curr_id]='$id'";
        $var_5 = mysql_query($var_4);
        $var_7 = array();
        while ($var_6 = mysql_fetch_array ($var_5))
        { array_push($var_7, $var_6[$GLOBALS[field_curr_making_id]]); }
        sort($var_7);
        $var_8 = array_shift ($var_7);

        $var_9 = "DELETE FROM $GLOBALS[tabelle_4] WHERE $GLOBALS[field_curr_making_id]='$var_8'";
        $var_10 = mysql_query($var_9);
        return true;

        Kommentar


        • #5
          na wenns funktioniert dann ist ja gut ich steig da nicht durch, wieso gibst du deinen variablen keine sinnvollen namen ?
          meine Projekte bestaunen: http://www.kleiza.de

          Kommentar


          • #6
            Pfoaaaahh
            Host Du des verschlüsselt?

            Kommentar


            • #7
              Das ist Teil eines größeren CMS, um genauer zu sein, der globalen Functions.php. Auch wenn die Vars nur innerhalb der Funktionen gelten, will ich kein Risiko eingehen. Außerdem ist doch der Inhal auch ohne spezielle Namen ersichtlich, hab die mysql_fetch_array Anweisung einfach in ne Schleife gesetzt, damit alle Elemente ausgegeben werde, die von der Schleife zurückgegebenen Elemente per array_push nem leeren Array zugefügt, das Array numerisch sortiert, so das die kleinste ID vorne steht, somit auch die ältere, per array_shift das erste entfernt und zurückgegben und mit diesen Wert dann den DELETE Query gesteuert.

              Kommentar


              • #8
                Original geschrieben von MaxPayne
                ....somit auch die ältere, per array_shift das erste entfernt und zurückgegben und mit diesen Wert dann den DELETE Query gesteuert.
                wäre da ein ORDER BY .... DESC nicht besser, als den ganzen rotz von php machen zu lassen? das halte ich zumindest für wesentlich übersichtlicher und eleganter.

                da werde ich bestimmt zustimmung ernten können.
                wenn auch nicht unbedingt von dir....
                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


                • #9
                  Und mit LIMIT könnte man da noch eins draufsetzen:

                  $var_4 = "SELECT $GLOBALS[field_curr_making_id] FROM $GLOBALS[tabelle_4] WHERE $GLOBALS[field_curr_id]='$id' ORDER BY $GLOBALS[field_curr_making_id] LIMIT 1";

                  Kommentar

                  Lädt...
                  X