phpbar.de logo

Mailinglisten-Archive

[php] Duplikate in der MySQL - Datenbank filtern

[php] Duplikate in der MySQL - Datenbank filtern

Carsten Kästner kaestner at strg-z.de
Sam Mar 20 15:02:20 CET 2004


Hallo Frat,

On Sat, 20 Mar 2004 14:52:13 +0100
"Frat | g." <cheaters at gmx.de> wrote:

> Also beim Eintragen in die Tabelle führe ich erst ein SELECT durch und
> nur, wenn der Eintrag nicht in der DB ist, wird ein neuer INSERT getätigt.
> (Ist es das, was Du mit unique Flag meinst?)

Nein. Ich gehe mal davon aus das du mit einer MySql DB arbeitest. In dieser hast du Option (direkt von MySql) das du bestimmten Spalten ein unique Flag geben kannst. Somit verhindert MySql schon das du doppelte Werte eintragen kannst (ist eigentlich wie bei einem Primarykey).

ALTER TABLE `MEINE_TABELE` ADD UNIQUE (
`DIE_SPALTE_IN_DER_KEINE_DOPPELTEN_WERTE_DRIN_SEIN_DÜRFEN`
);

Du brauchst dann lediglich beim Insert in die Tabelle eine kleine Fehlerroutine die die diesen Fehler abfängt und dann trotzdem mit den folgenden Insert's weitermacht.

> Aber das Problem ist, dass ich zuerst eine gesamte Seite einlese, die
> Links, die auf dieser Seite vorhanden sind, in eine Datei schreibe und erst
> dann
> in die DB schreibe. Deshalb kann es vorkommen, dass ab und an mal 2
> identische Einträge enthalten sind und genau deswegen benötige
> ich eine andere Alternative.

Solltest du den reinen MySql Weg nicht benutzen (halte ich persönlich aber für die eleganteste und einfachste Variante) kannst du auch anstatt alles in eine Datei zu schreiben die ganzen Links in einen Array schreiben:

myLinks[0] = 'http://www.google.de';
myLinks[1] = 'http://www.altavista.de';
myLinks[2] = 'http://www.alltheweb.com';
...
myLinks[200] = 'http://www.google.de';

wenn du nun mit array_unique arbeitest

filteredLinks = array_unique(myLinks);

sollte dann eigentlich in etwas das raus kommen:

myLinks[0] = 'http://www.google.de';
myLinks[1] = 'http://www.altavista.de';
myLinks[2] = 'http://www.alltheweb.com';
...
myLinks[200] = 'http://www.google.de'; <-- wird rausgefiltert weil doppel
myLinks[200] = 'http://www.metacrawler.com';

also der doppelte google wird durch den zu erst nicht doppelten Eintrag im Array ersetzt.

Wie gesagt würde auch funktionieren allerdings würde ich es wenn es sich nicht irgendwie vermeiden lässt diese Option nicht bevorzugen. Je nachdem wie viele Seiten du parst und wie viele Links auf der Seite vorhanden sind, kann es passieren das PHP mit einmal sehr viel Speicher benötigt um den Array zu erstellen.


Mit besten Grüßen

Carsten Kästner
[programmierung.support]
................................
100g [netzwerk für onlinekommunikation]
Joachim-Friedrich-Straße 53

10711 Berlin

T: +49.(0)179.104.80.56

F: +49.(0)30.89.54.27.98

kaestner at 100g.de

www.100g.de

php::bar PHP Wiki   -   Listenarchive