Suche schnelles Vergleichen von Datenbank-Werten mit Array

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.
D=2Eh., 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 [at] mysql_query("SELECT value FROM table);
while ($row =3D mysql_fetch_object($result))
{
$found =3D 0;
foreach ($array as $line)
{
if ($line =3D=3D $row ->value) {
$found =3D 1; }
}
if (! $found) {
echo $row->value."<br>"; }
}


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

Danke! Gruß Peter
Peter Stoss [ So, 17 Juni 2007 17:47 ] [ ID #1740475 ]

Re: Suche schnelles Vergleichen von Datenbank-Werten mit Array

..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
Michael Fesser [ So, 17 Juni 2007 19:25 ] [ ID #1740476 ]

Re: Suche schnelles Vergleichen von Datenbank-Werten mit Array

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.
do.not.REMOVETHAT [ Mo, 18 Juni 2007 11:06 ] [ ID #1741250 ]

Re: Suche schnelles Vergleichen von Datenbank-Werten mit Array

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
Claus Reibenstein [ Mo, 18 Juni 2007 18:29 ] [ ID #1741257 ]

Re: Suche schnelles Vergleichen von Datenbank-Werten mit Array

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
Ulf Kadner [ Mo, 18 Juni 2007 19:36 ] [ ID #1741258 ]

Re: Suche schnelles Vergleichen von Datenbank-Werten mit Array

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
Claus Reibenstein [ Mo, 18 Juni 2007 23:10 ] [ ID #1741259 ]

Re: Suche schnelles Vergleichen von Datenbank-Werten mit Array

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
Ulf Kadner [ Di, 19 Juni 2007 00:27 ] [ ID #1741260 ]

Re: Suche schnelles Vergleichen von Datenbank-Werten mit Array

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 <http://learn.to/quote>
auch empfohlen wird, hättest Du das bemerkt.

> Mir ging es um was anderes.

Um was denn?

Gruß. Claus
Claus Reibenstein [ Di, 19 Juni 2007 09:07 ] [ ID #1742133 ]
PHP » de.comp.lang.php.datenbanken » Suche schnelles Vergleichen von Datenbank-Werten mit Array

Vorheriges Thema: PHP mit DB2 Anschluß
Nächstes Thema: mysql timestap in php timestampumwandeln