php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.04.2007, 20:05  
Benutzer
 
Registriert seit: 03.08.2006
Beiträge: 49
Riks
Standard Doppelte einträge löschen

Hi,

es gibt zwar schon threads mit "doppelte einträge löschen", aber die behandeln leider nich das, was ich suche.

Nach dem zusammen legen von 2 datensätzen auf eine objectID gibt es jetzt datensätze die gleich sind:

vorher:
Code:
objectID  value
    1       2
    1       3
    1       4
    2       3
    3       3
nachher:
Code:
objectID  value
    1       2
    1       3
    1       4
    1       3
    1       3
kann ich irgendwie in der WHERE anweisung einer DELETE anfrage angeben das er jetzt doppelte einträge löschen soll (eins behalten)?

Riks
Riks ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.04.2007, 21:37  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Hallo Riks,

über den ALTER Befehl mit ADD UNIQUE müßte Dein Problem lösbar sein.
nikosch ist offline   Mit Zitat antworten
Alt 24.04.2007, 22:27  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

@nikosch77:
Ich würde vermuten, dass der Befehl fehlschlägt, da es für die Spalte bereits doppelte Einträge gibt. Ein "Automerge" wäre mir neu.


Komplett gleiche Datensätze verstossen übrigens gegen das relationale Datenbank-Modell.
Ein Eintrag MUSS eindeutig ientifizierbar sein, notfalls ist der Primärschlüssel aus allen Spalten zusammengesetzt. Entfern die doppelten Einträge also dauerhaft. Ich hoffe mal, das ist nur ein einmaliger "Reinigungs"-Vorgang

Ehrlich gesagt wüsste ich nicht, wie du das mit einem Statement löst, aber da bin ich auch nicht so der König.
Schließlich kannst du wie erwähnt nicht untereinander zwischen Mehrfacheinträgen unterscheiden.

Ich würde wohl alle doppelten Kombinationen herausfiltern & deren Anzahl, und diese dann einzeln löschen. Nicht sehr performant, aber immerhin.

Doppelte zählen:
SELECT object_id, value FROM table WHERE CONCAT(object_id, '#', value) IN (SELECT DISTINCT CONCAT(object_id, '#', value) FROM table GROUP BY (object_id, value) HAVING COUNT(*) > 1)

Wie kam es denn zu diesem Katastrophen-Zustand in der DB?

Edit: Evtl. kannst du eine zusatzliche Auto-Increment/ID-Spalte einfügen, damit du wenigstens während dem Entfernen der doppelten Einträge eine Spalte eindeutig identfizieren kannst. Danach kannst du sie ja wieder entfernen.
Zergling-new ist offline   Mit Zitat antworten
Alt 25.04.2007, 09:37  
Benutzer
 
Registriert seit: 03.08.2006
Beiträge: 49
Riks
Standard

Das ganze entsteht wenn ich mehrere Objekte in der Datenbank zusammenfüge dann wird die objectID gleichgesetzt. Es ist also ein Reinigungsvorgang . und damit eben values nicht doppelt angezeigt werden, sollen die gelöscht werden. Hab das jetzt in 3 schritten gelöst. Zuerst werden alle values in ein array gespeichert die objectID 1 besitzt. Dann werden alle values der anderen objectIDs auf objectID 1 gesetzt deren Values nicht im array sind und zum schluss werden alle einträge gelöscht die noch die alten objectIDs besitzen.
Riks ist offline   Mit Zitat antworten
Alt 25.04.2007, 11:20  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Joa, so hätte ich das auch gemacht, solang die Tabelle noch nicht zu groß ist. Ist schließlich ein einmaliger Vorgangen. Hättest du aber vorher daran gedacht, wäre es einfacher Erstmal alles rein und danach guckn, was man überhaupt haben willst, ist nicht die feine englische Art
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline   Mit Zitat antworten
Alt 25.04.2007, 14:06  
Benutzer
 
Registriert seit: 03.08.2006
Beiträge: 49
Riks
Standard

Na ja, das ist vllt grob gleichzusetzen mit dem zusammenfügen von threads in einem forum, da weiß man vorher auch nicht welche threads man wann zusammenfügt...

Danke auf jeden fall für eure tipps und hinweise!
Riks ist offline   Mit Zitat antworten
Alt 25.04.2007, 19:29  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

ok, über ALTER gehts wirklich nicht. Aber du kannst eine Tabelle mit der gleichen Strukur erstellen und dann mit
Code:
INSERT INTO Table2 SELECT DISTINCT * FROM Table1
die Werte dorthin kopieren.
nikosch ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[gelöst]LEFT JOIN, DINSTINCT und trotzdem doppelte?!?! stefanjann Datenbanken 10 06.02.2008 11:49
Doppelte Einträge aus Array Filtern Robstar Datenbanken 25 01.06.2006 11:56
RegExp: doppelte Zeichen finden Zergling-new PHP Tipps 2006 2 13.04.2006 19:26
Doppelte DB-Einträge pro Jahr als 1 Eintrag / Jahr zählen. aherzog PHP Tipps 2006 10 25.03.2006 23:28
Select - doppelte Ergebnisse ragman Datenbanken 3 26.01.2006 11:53
Sicherung gegen doppelte Einträge Maho88 PHP Tipps 2006 5 02.01.2006 12:49
nicht doppelte zufallszahlen imported_kontur PHP Tipps 2005-2 6 15.10.2005 17:30
doppelte Werte / Strings einer Spalte nur einmal ausgeben... Datenbanken 2 29.07.2005 12:10
doppelte Einträge aus Datenbank anzeigen Lia PHP Tipps 2005 9 24.05.2005 14:49
innerhalb eines echos doppelte anführungsstriche PHP Tipps 2005 4 04.03.2005 12:53
Doppelte Werte im Array löschen mittels hash PHP Tipps 2004-2 1 09.12.2004 11:43
[Erledigt] Doppelte zeilen löschen Datenbanken 8 06.12.2004 17:17
[Erledigt] Doppelte Einträge aus Textdatei entfernen PHP Tipps 2004 11 17.10.2004 15:00
Doppelte Datensätze anzeigen! Datenbanken 3 25.09.2004 17:42
Doppelte Einträge prüfen Datenbanken 12 15.06.2004 20:30

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
access 2007 duplikate löschen, access 2007 doppelte datensätze löschen, access doppelte datensätze löschen, access duplikate löschen, duplikate löschen access 2007, http://www.php.de/datenbanken/43953-doppelte-eintraege-loeschen.html, access 2007 doppelte werte, access 2007 doppelte einträge löschen, access duplikate entfernen 2007, access doppelte einträge löschen, access duplikate entfernen, access 2000 doppelte datensätze löschen, doppelte wörter löschen, access 2007 doppelte daten löschen, access 2007 duplikate filtern, duplikate bei access löschen 2007, access 2007 doppelte datensätze finden, löschen doppelte datensätze access 2007, php doppelte wörter entfernen, php doppelte value einträge entfernen

Alle Zeitangaben in WEZ +2. Es ist jetzt 06:12 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.