Suche schnelles Vergleichen von Datenbank-Werten mit Array

Suche schnelles Vergleichen von Datenbank-Werten mit Array

am 17.06.2007 17:47:45 von Peter Stoss

Hallo,
ich habe in einer MySQL-Spalte etwa 20.000 Textwerte a la "ABC, DEF,
GHI, BCD, EFG" stehen.
In einem Source-Textfile (Werte untereinander aufgelistet) habe ich
die neusten Werte stehen, die in der Tabelle überhaupt nur auftauchen
dürfen.
Dh., ich muss vergleichen ob irgendein Wert in der Datenbank nicht
mehr im Textfile vorkommt. Wenn DEF also in der Datenbank steht, aber
nicht mehr im Textfile, muss ich es angezeigt bekommen.
Es ist wenig sinnvoll, mittels Zeilenweisen Vergleich das zu machen -
da ich so schließlich 20.000x jede Datenbankzeile einzeln mit den
20.000 Zeilen im Array mit foreach vergleiche... das sprengt die
Performance ja völlig (20.000 x 20.000 Einzelvergleiche) und kann ja
nicht Sinn der Sache sein (wie im jetzigen Beispiel).

$array =3D file($filename);
$result =3D @mysql_query("SELECT value FROM table);
while ($row =3D mysql_fetch_object($result))
{
$found =3D 0;
foreach ($array as $line)
{
if ($line == $row ->value) {
$found =3D 1; }
}
if (! $found) {
echo $row->value."
"; }
}


Wer kann mir da helfen? Ich möchte dieses Vergleichstextfile
eigentlich nicht erst in einen temporären Datenbanktable schreiben.

Danke! Gruß Peter

Re: Suche schnelles Vergleichen von Datenbank-Werten mit Array

am 17.06.2007 19:25:54 von Michael Fesser

..oO(Peter Stoss)

>ich habe in einer MySQL-Spalte etwa 20.000 Textwerte a la "ABC, DEF,
>GHI, BCD, EFG" stehen.
>In einem Source-Textfile (Werte untereinander aufgelistet) habe ich
>die neusten Werte stehen, die in der Tabelle überhaupt nur auftauchen
>dürfen.
>D.h., ich muss vergleichen ob irgendein Wert in der Datenbank nicht
>mehr im Textfile vorkommt. Wenn DEF also in der Datenbank steht, aber
>nicht mehr im Textfile, muss ich es angezeigt bekommen.
>[...]
>
>Wer kann mir da helfen? Ich möchte dieses Vergleichstextfile
>eigentlich nicht erst in einen temporären Datenbanktable schreiben.

Warum nicht? Sowas kann durchaus helfen, da man dann mit DBMS-Mitteln
den Datenbestand durchforsten kann. Du könntest auch beide Listen in
Arrays laden und dann z.B. array_diff() drüberjagen.

Micha

Re: Suche schnelles Vergleichen von Datenbank-Werten mit Array

am 18.06.2007 11:06:11 von do.not.REMOVETHAT

Peter Stoss schrieb:

> Es ist wenig sinnvoll, mittels Zeilenweisen Vergleich das zu machen -
> da ich so schließlich 20.000x jede Datenbankzeile einzeln mit den
> 20.000 Zeilen im Array mit foreach vergleiche... das sprengt die
> Performance ja völlig (20.000 x 20.000 Einzelvergleiche) und kann ja
> nicht Sinn der Sache sein (wie im jetzigen Beispiel).

Wie soll man 200090 Dinge mit 20000 Dingen vergleichen ohne 20000x20000
Vergleiche zu haben? Nur weil Du die Vergleiche nicht in Deinem Script
hast sondern irgendwo anders (RDBMS) heißt das nicht, dass es die
Vergleiche nicht gibt.

Grüße, Matthias

--
http://www.trullala.de
--
Der Trend geht ganz eindeutig zur Zweitsignatur.

Re: Suche schnelles Vergleichen von Datenbank-Werten mit Array

am 18.06.2007 18:29:18 von Claus Reibenstein

Matthias P. Wuerfl schrieb:

> Wie soll man 200090 Dinge mit 20000 Dingen vergleichen ohne 20000x20000
> Vergleiche zu haben?

Indem man die Dinge vorher sortiert.

Gruß. Claus

Re: Suche schnelles Vergleichen von Datenbank-Werten mit Array

am 18.06.2007 19:36:54 von Ulf Kadner

Claus Reibenstein wrote:

>> Wie soll man 200090 Dinge mit 20000 Dingen vergleichen ohne 20000x20000
>> Vergleiche zu haben?
>
> Indem man die Dinge vorher sortiert.

Und eine Sortierung benötigt keinen Vergleich? x-)

MfG, Ulf

Re: Suche schnelles Vergleichen von Datenbank-Werten mit Array

am 18.06.2007 23:10:01 von Claus Reibenstein

Ulf Kadner schrieb:

> Claus Reibenstein wrote:
>
>>> Wie soll man 200090 Dinge mit 20000 Dingen vergleichen ohne 20000x20000
>>> Vergleiche zu haben?
>>
>> Indem man die Dinge vorher sortiert.
>
> Und eine Sortierung benötigt keinen Vergleich? x-)

Sie benötigt deutlich weniger als 20000x20000 Vergleiche. Genau darum
ging es.

Gruß. Claus

Re: Suche schnelles Vergleichen von Datenbank-Werten mit Array

am 19.06.2007 00:27:42 von Ulf Kadner

Claus Reibenstein wrote:

>>>> Wie soll man 200090 Dinge mit 20000 Dingen vergleichen ohne 20000x20000
>>>> Vergleiche zu haben?
>>> Indem man die Dinge vorher sortiert.
>> Und eine Sortierung benötigt keinen Vergleich? x-)
>
> Sie benötigt deutlich weniger als 20000x20000 Vergleiche. Genau darum
> ging es.

Nein es ging Dir darum. Mir ging es um was anderes. Aber egal. Laß mal
stecken.

MfG, Ulf

Re: Suche schnelles Vergleichen von Datenbank-Werten mit Array

am 19.06.2007 09:07:23 von Claus Reibenstein

Ulf Kadner schrieb:

> Claus Reibenstein wrote:
>
>>>>> Wie soll man 200090 Dinge mit 20000 Dingen vergleichen ohne 20000x20000
>>>>> Vergleiche zu haben?

Das war die Aussage, auf die ich ursprünglich geantwortet habe.

>>>> Indem man die Dinge vorher sortiert.
>>>
>>> Und eine Sortierung benötigt keinen Vergleich? x-)
>>
>> Sie benötigt deutlich weniger als 20000x20000 Vergleiche. Genau darum
>> ging es.
>
> Nein es ging Dir darum.

Nein, es ging Matthias darum (s.o.). Würdest Du die Namen der Zitierten
stehen lassen, so wie ich das tue und wie es auf
auch empfohlen wird, hättest Du das bemerkt.

> Mir ging es um was anderes.

Um was denn?

Gruß. Claus