Ankündigung

Einklappen
Keine Ankündigung bisher.

kein doppelter eintrag

Einklappen

Neue Werbung 2019

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

  • kein doppelter eintrag

    Hey Leute,

    und zwar möchte ich mit einem Script doppelte Einträge in einer Datenbank löschen. Und zwar nur wenn ein bestimtes Feld z.Bsp. der Text eines Witzes doppelt vorhanden ist. Also die Zeichen übereinstimmen.

    Bsp.
    ich habe eine neue frau
    ich habe eine neue frau <---löschen
    ich habe neu frauen <---nciht löschen

    Hoffe ihr wisst was ich meine.

    mfg

    sebastian


  • #2
    Hi,

    so könnte das gemacht werden:

    Alle Datensätze auslesen -> Für jeden einzelnen Datensatz eine Query an die DB schicken: SELECT spalte FROM table WHERE datensatz = $aktueller_datensatz -> mit mysql_num_rows() prüfen, wieviele Datensätze zurückgeliefert werden, wenn 1 zurückgegeben wird weitermachen, wenn 2 oder höher alle entsprechenden Datensätze bis auf einen löschen.

    Kommentar


    • #3
      Machs doch mit einer Hilfstabelle:

      INSERT INTO hilfstabelle VALUES(spalte1, spalte2, spalte3) (SELECT spalte1, DISTINCT spalte2, spalte3 FROM originaltabelle)
      DELETE FROM orginaltabelle -- oder ists neuerdings nich TRUNCATE originaltabelle?
      INSERT INTO originaltabelle VALUES(spalte1, spalte2, spalte3) (SELECT spalte1, spalte2, spalte3 FROM hilfstabelle)
      DROP hilfstabelle

      Wobei doppelte Einträge in spalte2 ignoriert werden.
      Ist allerdings frei runtergeschrieben, ohne Test, auf jeden Fall ein Backup machen.
      Und nach jedem Gästebuch-Eintrag würde ich das auch nicht machen

      Kommentar


      • #4
        Mmmh
        Versteh ich zwar nicht ganz, aber ich sollte es vielleicht mal nur mir distinct probieren. Mal sehen. Jemand noch ne andere idee?

        mfg

        Kommentar


        • #5
          Zitat von piti66
          Versteh ich zwar nicht ganz [..] Jemand noch ne andere idee?
          Ich verstehe nicht wie man eine funktionierende Möglichkeit nicht in Betracht zieht, nur weil man sie nicht versteht. Obendrein ist sie nicht kompliziert.

          Kommentar


          • #6
            Also ich würde es wohl auch auf die Art von Corvin Gröning lösen. Ne extra Tabelle in der Datenbank würd mir nich so gefallen. Das heißt aber nicht dass es nicht funktioniert :P

            Kommentar


            • #7
              Alle Datensätze auslesen -> Für jeden einzelnen Datensatz eine Query an die DB schicken:
              Ist aber nich euer ernst oder? Können ja mal ein "Wettrennen" machen

              Kommentar


              • #8
                Das ganze soll natürlich dynamisch, via PHP-Skript passieren

                Kommentar


                • #9
                  Die idee find ich ja gut, aber wie gesagt steige da nicht so dahinter.
                  Erklär es mir doch bitte etwas genauer!

                  nennen wir spalte 1 'id', spalte 2 'text'(soll verglichen werden und spalte 3 'name'
                  tabelle1 'witz' tabelle2 'test'

                  mfg

                  sebastian

                  Kommentar


                  • #10
                    Zitat von Corvin Gröning
                    Das ganze soll natürlich dynamisch, via PHP-Skript passieren
                    Natürlich per Skript. Aber pro Datensatz ein SELECT und dann noch eventuell DELETE auszuführen ist schon extremst unperformant.

                    @piti66: Das Prinzip ist: Erstelle eine Hilfs(-Datenbank)-Tabelle mit der selben Struktur wie deine 'witz' Tabelle. Nennen wir sie 'witz_bereinigteKopie'.

                    Per "SELECT id, DISTINCT text, name FROM witz" erhältst du alle Einträge aus der Tabelle mit der Ausnahme, dass doppelte Einträge von "text" nicht mit ins Ergebnis genommen werden. Ich vermute mal es wird der 1. gefundene "text" genommen.

                    Diese Ergebnisliste kopierst du mittels INSERT-SELECT-Statement in die Hilfs-Tabelle 'witz_bereinigteKopie'.
                    Dann leerst du die Original-Tabelle 'witz' und kopierst den Inhalt der 'witz_bereinigteKopie' wieder in die (jetzt leere) 'witz'-Tabelle.

                    Zusätzlich könntest du die Struktur von 'witz' ändern, nämlich in dem du 'text' als UNIQUE (einzigartig) deklarierst, in phpMyAdmin ganz einfach beim Register "Struktur". Ab dann kann man garkeine doppelten Einträge mehr eintragen. Dann wirst du allerdings das Problem haben, dass spammende Witzbolde einfach einen . oder ein andere Zeichen an den Witz fügen und schon ist er nicht mehr einzigartig.

                    Abgesehen jetzt davon: Wenn du das Prinzip verstanden hast, kann du dieses Wissen mittels oben geposteten SQL-Codes anwenden. Ne Komplettlösung wie du sie offenbar haben willst gibts nich :P

                    Kommentar


                    • #11
                      Noch einfacher:
                      1. Mittels CREATE TABLE tabelle2 SELECT DISTINCT * FROM tabelle1 eine neue Tabelle erstellen, in der kein Datensatz doppelt vorkommt.
                      2. tabelle1 löschen
                      3. tabelle2 in tabelle1 umbennen

                      Kommentar


                      • #12
                        NE danke will keine Komplettlösung! Ich denke weiß jetzt was du meinst.
                        Werd gleich mal anfangen. Danke dir erstmal. Wenn es probleme gibt meld ich mich nochmal.

                        mfg

                        sebastian

                        Kommentar


                        • #13
                          Kann man nicht sowas in der Art machen, um doppelte Einträge auszulesen?

                          SELECT witz1.id FROM witz AS witz1, witz AS witz2 WHERE witz1.text = witz2.text AND witz1.id != witz2.id

                          Bzw. daraus gleich ein DELETE machen, falls das klappt?

                          Basti

                          Kommentar


                          • #14
                            Also ich habs mal ausprobiert! Es gibt einige Probleme.

                            PHP-Code:
                            <?php
                            include("include/connect/textconnect.php");
                            $query="create table witztest select Distinct text, name, kategorie, vote_gesamt, vote_anzahl, durchschnitt, ok, id from witz";
                            $abfrage=Mysql_query($query);
                            $query1="drop table witz";
                            $abfrage1=Mysql_query($query1);
                            $query2="RENAME TABLE witztest to witz";
                            $abfrage2=Mysql_query($query2);
                            ?>
                            Wenn ich es so mache oder ein * setze ignoriert er dass distinct völlig. Und schreibt alle Datensätze in die neue Tabelle. Und die id ist nicht mehr primary key.
                            Wenn ich die id rauslasse funktioniert es wunderbar, nur leider wird natürlich die id rausgelassen und fehlt mir dann. für andere Sachen.
                            Wo kann der fehler liegen?

                            mfg

                            Kommentar

                            Lädt...
                            X