Beitrag von mk (966 Beiträge) am Dienstag, 26.September.2006, 08:22.
mehrfach vorkommende Datensätze anzeigen
Hallo,
ich hab so einiges hier im Forum und in der BIB diesbezüglich gefunden,
aber doch nicht das richtige.
Ich muß mehere Datenbanken zusammenführen, dabei kommt es vor, dass Datensätze mehrfach dann da sind.
Dies wollte ich denn manuell prüfen.
Hiermit werden schon mal Datensätze angezeigt die doppelt sind:
<perl>
$dbname=vokabeln6;
out <<EOF;
<table border="1" >
<tr>
<td width="50">Nr</td>
<td width="50">Thema</td>
<td >Deutsch</td>
<td >Englisch</td>
</tr>
EOF
get "Id=* sort=English,Deutsch ", "$dbname";
while(get_next("$dbname"))
{
$merke=$English ;# hier kann ich auch mehr Felder verknüpfen
if ($merke_a eq $English)
{
out "<tr><td >$Id</td><td >$Thema</td><td ><b>$Deutsch";
out "<font color='#0000FF'> |</font> $Deutsch2" if ($Deutsch2 ne "");
out "<font color='#0000FF'> |</font> $Deutsch3" if ($Deutsch3 ne "");
out "</b>";
out " ($Deutsch_e)" if ($Deutsch_e ne "");
out "</td><td ><b>$English</b>";
out " ($English_e)" if ($English_e ne "");
out "</td></tr>";
}
$merke_a=$merke ;
}
out "</table>";
</perl>
aber der 1. Datensatz ist dann nicht zu sehen.
(Es geht hier ab und zu um mehere tausend Datensätze.)
Gibt es da eine einfache Lösung?
Michael
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 29.September.2006, 08:07.
Re: mehrfach vorkommende Datensätze anzeigen
Antworten
Beitrag von mk (966 Beiträge) am Freitag, 29.September.2006, 09:00.
Re: mehrfach vorkommende Datensätze anzeigen
Hallo,
so hätte ich es gern:
wenn 2 Felder in einem anderen Datensatz genauso stehen, zeige beide Datensätze an, dann mit allen anderen Feldern, um zu sehen, ob ein Unterschied da ist.
Michael
Antworten
Beitrag von hempelr (1976 Beiträge) am Freitag, 29.September.2006, 13:31.
Re: mehrfach vorkommende Datensätze anzeigen
Antworten
Beitrag von mk (966 Beiträge) am Freitag, 29.September.2006, 17:27.
Re: mehrfach vorkommende Datensätze anzeigen
Hallo,
ich habe nicht das Problem, dass ich die Doubletten nicht finde,
das Beispiel aus der BIB hatte ich mir schon angeschaut,
soweit ich es verstanden habe, prüft es beim neuanlegen.
Michael
Antworten
Beitrag von mk (966 Beiträge) am Sonntag, 15.Oktober.2006, 19:37. WWW: vokabeltrainer-online.net
Re: mehrfach vorkommende Datensätze anzeigen
Hallo,
es wird immer wichtiger, dass ich ne Lösung habe.
nochmal, damit es nicht in Vergessenheit gerät:
so hätte ich es gern:
wenn 2 Felder in einem anderen Datensatz genauso stehen, zeige BEIDE (oder noch mehr) Datensätze an, dann mit allen anderen Feldern, um zu sehen, ob und wo ein Unterschied da ist.
Michael
Antworten
Beitrag von richard (1187 Beiträge) am Montag, 16.Oktober.2006, 10:19. WWW: posaunenchor-rhoden.de
Re: mehrfach vorkommende Datensätze anzeigen
Antworten
Beitrag von mk (966 Beiträge) am Montag, 16.Oktober.2006, 11:48.
Re: mehrfach vorkommende Datensätze anzeigen
Hallo,
hört sich gut an, müßte auch mit einer DB gehen.
Teste ich heut Abend.
Michael
Antworten
Beitrag von mk (966 Beiträge) am Montag, 16.Oktober.2006, 15:35.
Re: mehrfach vorkommende Datensätze anzeigen
habs doch schon getestet,
so:
<perl>
$dbname=vokabeln6;
out <<EOF;
<table border="1" >
<tr>
<td width="50">Nr</td>
<td width="50">Thema</td>
<td >Deutsch</td>
<td >Englisch</td>
</tr>
EOF
get "Deutsch~=Abfall sort=Deutsch,English ", "$dbname";#Eingegrenzt zum Test (Abfall ist doppelt)
while(get_next("$dbname"))
{
$Deutsch_me=$Deutsch ;
get "Deutsch==$Deutsch_me sort=Deutsch,English ", "$dbname";
if ($_amount > 1 )
{
get "Deutsch==$Deutsch_me sort=Deutsch,English ", "$dbname";
while(get_next("$dbname"))
{
out "<tr><td >$Id</td><td >$Thema</td><td ><b>$Deutsch";
out "<font color='#0000FF'> |</font> $Deutsch2" if ($Deutsch2 ne "");
out "<font color='#0000FF'> |</font> $Deutsch3" if ($Deutsch3 ne "");
out "</b>";
out " ($Deutsch_e)" if ($Deutsch_e ne "");
out "</td><td ><b>$English</b>";
out " ($English_e)" if ($English_e ne "");
out "</td></tr>";
}
}
}
out "</table>";
</perl>
es läuft zu lange, hab es bevor es fertig war abgebrochen.
Will den Server ja nicht lahm legen.
Bei derzeit 2500 Datensätze ist dies wohl so nicht möglich.
Michael
Antworten
Beitrag von Sander (8133 Beiträge) am Montag, 16.Oktober.2006, 15:59.
Re: mehrfach vorkommende Datensätze anzeigen
also das macht sozusagen das gleiche:
get "Deutsch==$Deutsch_me sort=Deutsch,English ", "$dbname";
if ($_amount > 1 )
{
get "Deutsch==$Deutsch_me sort=Deutsch,English ", "$dbname";
while(get_next("$dbname"))
holt 2 mal alle daten, also weg mit dem ersten, das brauchts nicht
get "Deutsch==$Deutsch_me sort=Deutsch,English ", "$dbname";
while(get_next("$dbname"))
bp kommt auch durcheinander, wenn innerhalb einer whileschleife die gleiche db nochmal abgefragt wird, außer du arbeitest mit nem ergebnishash bei der ersten. wurde schon ganz oft bei mod und del im while get_next erörtert:
also so muß es aussehen
$dbname="vokabeln6"; ##!!!Strings ins "" schreiben
out <<EOF;
<table border="1" >
<tr>
<td width="50">Nr</td>
<td width="50">Thema</td>
<td >Deutsch</td>
<td >Englisch</td>
</tr>
EOF
get "Deutsch~=Abfall sort=Deutsch,English ", "$dbname","erg";#Eingegrenzt zum Test (Abfall ist doppelt)
while(get_next("erg"))
{
$Deutsch_me=$Deutsch ;
get "Deutsch==$Deutsch_me sort=Deutsch,English ", "$dbname";
while(get_next("$dbname"))
{
out "<tr><td >$Id</td><td >$Thema</td><td ><b>$Deutsch";
out "<font color='#0000FF'> |</font> $Deutsch2" if ($Deutsch2 ne "");
out "<font color='#0000FF'> |</font> $Deutsch3" if ($Deutsch3 ne "");
out "</b>";
out " ($Deutsch_e)" if ($Deutsch_e ne "");
out "</td><td ><b>$English</b>";
out " ($English_e)" if ($English_e ne "");
out "</td></tr>";
}
}
out "</table>";
Antworten
Beitrag von mk (966 Beiträge) am Montag, 16.Oktober.2006, 16:10.
Re: mehrfach vorkommende Datensätze anzeigen
Antworten
Beitrag von Sander (8133 Beiträge) am Montag, 16.Oktober.2006, 16:22.
Re: mehrfach vorkommende Datensätze anzeigen
na is ja klar, er kommt beim ersten doppelten an und sucht alle weiteren, dann kommt er irgendwann zum 2ten und sucht wieder alle weiteren. damit kommt auch eintrag 1 wieder auf den plan.
Antworten
Beitrag von mk (966 Beiträge) am Montag, 16.Oktober.2006, 18:49.
Re: mehrfach vorkommende Datensätze anzeigen
ok hab ich verstanden,
jetzt hab ich wieder dei Datensätze die nur ein mal vokommen rausgefiltert und habe versucht mit^
range=0,$Anzahl das Wiederholen zu unterbinden, es geht aber nicht.
so sieht es kpl. aus:
<perl>
$dbname="vokabeln6"; ##!!!Strings ins "" schreiben
out <<EOF;
<table border="1" >
<tr>
<td width="50">Nr</td>
<td width="50">Thema</td>
<td >Deutsch</td>
<td >Englisch</td>
</tr>
EOF
get "Deutsch~=a sort=Deutsch,English ", "$dbname","erg";#Eingegrenzt zum Test
while(get_next("erg"))
{
$Deutsch_me=$Deutsch ;
get "Deutsch==$Deutsch_me sort=Deutsch,English ", "$dbname";#neu um vorher die Anzahl zu ermitteln
$Anzahl=$_amount ;
get "Deutsch==$Deutsch_me sort=Deutsch,English range=0,$Anzahl ", "$dbname";
while(get_next("$dbname"))
{
if ($_amount > 1 )
{
out "<tr><td >$Id</td><td >$Thema2</td><td ><b>$Deutsch";
out "<font color='#0000FF'> |</font> $Deutsch2" if ($Deutsch2 ne "");
out "<font color='#0000FF'> |</font> $Deutsch3" if ($Deutsch3 ne "");
out "</b>";
out " ($Deutsch_e)" if ($Deutsch_e ne "");
out "</td><td ><b>$English</b>";
out " ($English_e)" if ($English_e ne "");
out "</td></tr>";
}
}
}
out "</table>";
</perl>
noch ne Idee ???
Michael
Antworten
Beitrag von richard (1187 Beiträge) am Montag, 16.Oktober.2006, 19:10. WWW: posaunenchor-rhoden.de
Re: mehrfach vorkommende Datensätze anzeigen
Eine simple Möglichkeit dieses Problem zu lösen, wäre die Datensätze statt auszugeben, zunächst nur zu markieren und dann die markierten Datensätze ausgeben zu lassen. Doppelte gibts dann nicht, die Markierungen müßten allerdings vor jeder neuen Doublettensuche gelöscht werden.
Antworten
Beitrag von mk (966 Beiträge) am Dienstag, 17.Oktober.2006, 11:10.
Re: mehrfach vorkommende Datensätze anzeigen - Lösung mit goto
Hallo,
für die Lösung habe ich ein "böses" Wort verwendet:
@cb ich kenne deine meinung noch dazu, wußte mich nur nicht anders zu helfen
<perl>
$dbname="vokabeln6";
out <<EOF;
<table border="1" >
<tr>
<td width="50">Nr</td>
<td width="50">Thema</td>
<td >Deutsch</td>
<td >Englisch</td>
</tr>
EOF
get "Deutsch~=a sort=Deutsch,English ", "$dbname","erg";#Eingegrenzt zum Test
while(get_next("erg"))
{
if ($Deutsch eq $Deutsch_me)
{
goto weiter;
}
get "Deutsch==$Deutsch_me sort=Deutsch,English ", "$dbname";
while(get_next("$dbname"))
{
if ($_amount > 1 )
{
out "<tr><td >$Id</td><td >$Thema2</td><td ><b>$Deutsch";
out "<font color='#0000FF'> |</font> $Deutsch2" if ($Deutsch2 ne "");
out "<font color='#0000FF'> |</font> $Deutsch3" if ($Deutsch3 ne "");
out "</b>";
out " ($Deutsch_e)" if ($Deutsch_e ne "");
out "</td><td ><b>$English</b>";
out " ($English_e)" if ($English_e ne "");
out "</td></tr>";
}
}
weiter:
}
out "</table>";
</perl>
Michael
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Dienstag, 17.Oktober.2006, 12:17.
Re: mehrfach vorkommende Datensätze anzeigen - Lösung mit goto
Echt, ich hab mal was Negatives über "goto" gesagt? ;-)
Aber Du kannst eigentlich alles auch ohne goto machen in dem Fall:
if ($Deutsch ne $Deutsch_me)
{
$Deutsch_me=$Deutsch ;
get "Deutsch==$Deutsch_me sort=Deutsch,English ", "$dbname";
while(get_next("$dbname"))
{
if ($_amount > 1 )
{
out "<tr><td >$Id</td><td >$Thema2</td><td ><b>$Deutsch";
out "<font color='#0000FF'> |</font> $Deutsch2" if ($Deutsch2 ne "");
out "<font color='#0000FF'> |</font> $Deutsch3" if ($Deutsch3 ne "");
out "</b>";
out " ($Deutsch_e)" if ($Deutsch_e ne "");
out "</td><td ><b>$English</b>";
out " ($English_e)" if ($English_e ne "");
out "</td></tr>";
}
}
}
}
Antworten
Beitrag von mk (966 Beiträge) am Dienstag, 17.Oktober.2006, 18:00. WWW: vokabeltrainer-online.net
Re: mehrfach vorkommende Datensätze anzeigen - Lösung mit goto
Hallo,
Danke an alle die geholfen haben, jetzt wo es fertig ist, frage ich mich warum bin ich nicht alleine drauf gekommen.
Michael
Antworten