Schleife solange bis freie ID gefunden wurde

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

  • #16
    Sorry, ich bin tatsächlich von Zahlen ausgegangen. Mit Buchstaben und Zahlen gehts natürlich.

    Für einen Dateinamen. Natürlich kann ich die fortlaufend nummerieren aber dann kann ja jeder rumschnüffeln und man kann sofort sehen wievieles Uploads schon erfolgt sind usw.
    1. Was ist daran schlimm, wenn jemand sieht wieviele Uploads schon erfolgt sind? Wofür schämst du dich?
    2. Man kann auch so "hochzählen", dass der User nicht erkennen kann, dass überhaupt gezählt wird. Stichwort Blockchiffre. Funktioniert ohne Zufall, terminiert immer, in O(n).

    Kommentar


    • #17
      zurück zur Ausgangsfrage: etwas eleganter - und ggf. auch performanter - könnte es je nach DB auch so gehen:

      Code:
      INSERT INTO TABELLE (ID) VALUES ($ID) WHERE NOT EXISTS (SELECT ID FROM TABELLE WHERE ID=$ID)
      Dann wird der Insert nur ausgeführt, wenn die ID noch nicht vorhanden ist. So ist ein vorheriges SELECT nicht nötig und es gibt auch keine UNIQUE Schlüsselverletzung. Beides ist vermutlich nicht sonderlich performant. Außerdem werden unnötige Fehler produziert.

      Nach Ausführung des o.g. SQL kannst du die Anzahl der eingefügten Zahlen abfragen - bei Null neuen Datensätzen war die ID bereits vorhanden.

      Kommentar


      • #18
        @Patrick_PQ:

        Und was ist jetzt der Unterschied zu einem normalen INSERT?

        Kommentar


        • #19
          OffTopic:
          Außerdem werden unnötige Fehler produziert.

          Kommentar


          • #20
            Mein Insert wird nur ausgeführt wenn die Bedingung erfüllt ist - sprich die ID noch nicht vorhanden ist. Wenn die ID bereits vorhanden ist, wird die Insert Anweisung nicht ausgeführt und es tritt kein Unique Fehler auf.

            Trotzdem sollte natürlich ein Unique Schlüssel gesetzt werden - sicher ist sicher.

            Ohne die Bedingung wird die Insert Anweisung in jedem Fall ausgeführt, wenn die ID bereits vorhanden ist, wird bei Unique Einschränkung auch kein Satz angelegt - dafür aber eine unnötige Fehlermeldung ausgeworfen.

            Kommentar


            • #21
              Unique ist natürlich vorhanden... deswegen reicht meiner Meinung nach auch ein normaler INSERT mit anschließender Abfrage der betroffenen Sätze aus...

              Kommentar

              Lädt...
              X