Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3750[/thread]

Vergleich: DAten 2 Tabellen Vergleichen



<< >> 10 Einträge, 1 Seite
nour
 2006-12-12 17:19
#34971 #34971
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe 2 tabellen
Status Referenz
ID DAtum ID Datum_Ref
1 12.03.06 2 12.03.o7
2 12.05.04 3 3.03.01
3 3.3.01 10 1.6.06


ich habe erstens mittels meis Script die IDs Mein tabelle Verglichen , falls eine nicht vorhandern werde ich dieser ID in der Tabellen eintragen.

FAlls mein ID vorhanden ist , dann gehe ich ein schritt weiter und vergleiche ich die Datums.
zu diesem letzten Teil wollte ich fragen wie Kann ich im Perl 2 sachen Vergleichen :

BEsser erklärt wie vergleiche ich ein Datum von der Ersten Tabelle Mit den ganze Datum der Zeweite Tabelle.

ich habe an eine Lösung anhand ein Schleife!!

DAnke im voraus
renee
 2006-12-12 17:25
#34972 #34972
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wenn es einfach nur um "Gleichheit" geht (also wie groß der Unterschied ist spielt keine Rolle), dann
Code: (dl )
1
2
3
4
5
6
my $date1 = '12.05.04';
my $date2 = '1.6.06';

if($date1 eq $date2){
print "gleich!\n!;
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
mho
 2006-12-12 17:40
#34973 #34973
User since
2003-09-12
30 Artikel
BenutzerIn
[default_avatar]
...sind die Tabellen in einer DB auf welche du mit SQL zugreifst? Dann versuch mal...
Code: (dl )
1
2
3
select id, datum from status
minus
select id, datum_ref from referenz

...und du erhälst alles was in status ist aber nicht so in referenz.
nour
 2006-12-13 10:18
#34974 #34974
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
Hallo rene danke ,

Ich habe noch vergessen dass die Datums, die ich Vergleichen will müssen zuerst dasselber ID Haben .

Soll ich lieber am Anfang an ein Select anweisung machender mir nur die Datums liefert.
und dann mache ich den vergleich weil so wie habe ich unten gescriebn es liefert immer ein fehler :
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
!/usr/bin/perl -w
#Hauptscript

use strict;
use warnings;
use DBI;


my $dbh;
my $raw_data;
my $sqldata;
my $rc;

open(DAT, '<','../gate_common/MySQLAccount.txt') or die"Could not open SQL-Data-file!";
$raw_data=<DAT>;
close(DAT);
chomp $raw_data;

my ($host,$user,$pass,$db) = split(/:/, $raw_data);
print "host ".$host."\n"."user ".$user."\n"."pass ".$pass."\n"."db ".$db."\n";

$dbh = DBI->connect("DBI:mysql:".$db.":".$host,$user,$pass) or die "Connect Error: $DBI::errstr()\n";



Query($dbh);

$dbh->disconnect;

sub Query{
my $query;
my $sth;
my $execu;
my $newdata;
my $NEID = 2923;
my $ds;
my @ergebnisse;
my @row;
my $Datum1;
my$Datum2;
my$query1;
my$query2;

################RC-CISCO LETZTEN STATUS ABFRAGEN ########################################################


$query = "SELECT * FROM RC_CISCO LEFT JOIN GATE_STATE ON RC_CISCO.NEID=GATE_STATE.NEID WHERE RC_CISCO.ID=? ORDER BY RC_CISCO.ID DESC LIMIT 1";
$sth = $dbh->prepare($query) or die "$DBI::errstr\n";
$sth->execute($NEID)or die "$DBI::errstr\n";

while($newdata = $sth->fetchrow_array()){

if(not defined $newdata){
$dbh->do("INSERT INTO RC_CISCO(ID) VALUES(?)",undef,$NEID) or die $dbh->errstr();

$dbh->do("INSERT INTO GATE_STATE(Data_RefID) VALUES(?)",undef,$NEID) or die $dbh->errstr();


}
$query1="SELECT RC_CISCO.Datum FROM RC_CISCO";
$query2="SELECT GATE_STATE.Datum_ref FROM GATE_STATE";

my $Datum1=$query1;
my $Datum2 = $query2;

if($Datum1 =$Datum2){

print "gleich!\n!;
}


}

while($newdata = $sth->fetchrow_hashref)
{
print " Name:$newdata->{NEID}}\n";
}
$sth->finish();
}
}

Danke im voraus.\n\n

<!--EDIT|renee|1165999480-->
mho
 2006-12-13 10:26
#34975 #34975
User since
2003-09-12
30 Artikel
BenutzerIn
[default_avatar]
vermutlich hast du den Fehler wegen
Code: (dl )
if($Datum1 = $Datum2)

dann
Code: (dl )
if($Datum1 == $Datum2)

oder
Code: (dl )
if($Datum1 eq $Datum2)
nour
 2006-12-13 10:31
#34976 #34976
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
Leider die Fehler liegt nicht daran ich bekomme auf die Console die Folgende Fehler::
------------------------------------------------------------

Bareword found where operator expected at ./Hauptprogramm.pl line 76, near "print " Name"
(Might be a runaway multi-line "" string starting on line 68)
(Do you need to predeclare print?)
String found where operator expected at ./Hauptprogramm.pl line 76, at end of line
(Missing semicolon on previous line?)
syntax error at ./Hauptprogramm.pl line 76, near "print " Name"
Can't find string terminator '"' anywhere before EOF at ./Hauptprogramm.pl line 76.

------------------------------------------------------------

Danke im voraus
mho
 2006-12-13 10:41
#34977 #34977
User since
2003-09-12
30 Artikel
BenutzerIn
[default_avatar]
dann liegts an:
Code: (dl )
print "gleich!\n!;

richtig:
Code: (dl )
print 'gleich!'."\n";
renee
 2006-12-13 10:50
#34978 #34978
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Neben dem Fehler, den mho berichtigt hat, wird $Datum1 nie gleich $Datum2 sein, da dort nur die SQL-String drinstehen - und nicht deren Ergebnisse. Du musst die Abfrage auch noch ausführen...

Und wenn Du schonmal alle Ergebnisse abgegriffen hast (erste while-Schleife), dann kommst Du nie in die zweite while-Schleife...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
nour
 2006-12-13 10:52
#34979 #34979
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
es funktioniert
danke !
nour
 2006-12-13 11:40
#34980 #34980
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
ja das stimmt rene!

das habe ich auch bemerkt und ich bekomme dises feheler nie los.

aber vorhin wollte ich was wichtiges wissen:

falls ich will überprüfen ob die ID's der Erste Tabelle in die Zweite Tabelle vorhanden sind muss ich eine schleife machen?

Weil falls es nicht vorhanden ist dann muss ich dieses ID eben in die Tabelle EIntragen falls ist es Vorhanden

Dann muss ich den Rest der  DAten beide TAbelle überprüfen !!!
HIMM ich habe kein IDDEE ?

ich habe den Folgenden Skript geschrieben:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/perl -w
#DatenbankAbfragen

use strict;
use warnings;
use DBI;


my $dbh;
my  $raw_data;
my  $sqldata;
my  $rc;

open(DAT, '<','../gate_common/MySQLAccount.txt') or  die"Could not open SQL-Data-file!";
$raw_data=<DAT>;
close(DAT);
chomp $raw_data;

my  ($host,$user,$pass,$db) = split(/:/, $raw_data);
print "host ".$host."\n"."user ".$user."\n"."pass ".$pass."\n"."db   ".$db."\n";

$dbh = DBI->connect("DBI:mysql:".$db.":".$host,$user,$pass) or die "Connect Error: $DBI::errstr()\n";

Query($dbh);
 
$dbh->disconnect;                                

sub Query{
my $query;
my $sth;
my $execu;
my $newdata;
my $NEID = 2923;
my $ds;
my @ergebnisse;
my @row;



################RC-CISCO LETZTEN STATUS ABFRAGEN ####################################

$query = "SELECT * FROM RC_CISCO LEFT JOIN GATE_STATE ON RC_CISCO.NEID=GATE_STATE.NEID WHERE RC_CISCO.NEID=?  ORDER BY  RC_CISCO.ID DESC LIMIT 1;";
 $sth = $dbh->prepare($query) or die "$DBI::errstr\n";
 $sth->execute($NEID)or die "$DBI::errstr\n";

 while($newdata = $sth->fetchrow_array()){

if(not defined $newdata){
  $dbh->do("INSERT INTO RC_CISCO(NEID) VALUES(?)",undef,$NEID) or die $dbh->errstr();
}
 if(not defined $newdata){
  $dbh->do("INSERT INTO GATE_STATE(NEID) VALUES(?)",undef,$NEID) or die $dbh->errstr();
}


while($newdata = $sth->fetchrow_hashref)
   {
    print " Name:$newdata->{NEID}}\n";
   }
$sth->finish();
}


____________________________________________________
der Obere COde vergleicht mir nur ob dieser datensatz $NEID von beiden Tabelle gleich oder nein.

Danke im Voraus!!

Ich versuch mal ob ich ein lösung finde .

Eine schönen Tag noch

--- Modedit Gwendragon
Code-Tag repariert
---\n\n

<!--EDIT|GwenDragon|1166003375-->
<< >> 10 Einträge, 1 Seite



View all threads created 2006-12-12 17:19.