Schrift
[thread]3754[/thread]

Tabelle Letzte Status überprüfen: Satus und zeilen Vergleiche

Leser: 1


<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten
nour
 2006-12-19 10:59
#34992 #34992
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
Guten Tag,

mein script ist an einer phpMyAdmin Datenbank verbunden.

in der Datenbank steht der Folgende Tabelle:
Tabelle Rechnen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
ID      status     Text                                 MD5
1       2329      "text1                           d41d8cd98f00b    
2       2329     " text2                           da5766dggfhd8
3       1423      "text3                           yfgbdf232424fgf


Tabelle Daten:

ID   Status         Datum                        RfID
1     2911          2006-03-19                      1
2     2907          2004-07-23                      2
3     2923          2006-08-11                      3


ich habe ersten den vergleich der ID's beide Tablle verglichen falls eine ist nicht vorhanden er sollte eingetragen werden , und jetzt will ich in der ersten tabellen die beide zeilen mit Der MD5 Spalten vergleichen der letzten eingetragene und der vorletzten.
mein code ist wie folgend

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
#!/usr/bin/perl -w
use strict;
use warnings;
use DBI;
use Digest::MD5;
my $dbh;
my  $raw_data;
my  $sqldata;

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);
   rechnen($dbh);
sub Query{
my $query;
my $sth;
my $execu;
my $newdata;
my $file;
my $ds;
my @ergebnisse;
my @row;
$query = "SELECT RefID FROM &acute;Rechnen ,Daten WHERE Rechnen .ID=DatenRefID   ORDER BY TS_LastChange ";
 $sth = $dbh->prepare($query) or die "$DBI::errstr\n";
 $sth->execute or die "$DBI::errstr\n";

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

if(not defined $newdata){
  $dbh->do("INSERT INTO Rechnen(ID) VALUES(?)",undef) or die $dbh->errstr();
 
}
print"$newdata\n";
   }
$sth->finish();
}


mein Problem ob sollte ich zu meine m Script eine wheile schleife einfügen um die Vergleiche zu führen.

hat jemand eine idee wie ich die MD5 beim 2ten vergleich führen kann :
als Beispiel:

Code: (dl )
1
2
3
4
if ( get_MD5($erste_datei) eq get_MD5($zwote_datei) )
{
  # tu dies und das..
}


Danke im voraus

--- Modedit Gwendragon
Code-Tags repariert
---\n\n

<!--EDIT|GwenDragon|1166518969-->
renee
 2006-12-19 11:48
#34993 #34993
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du spricht ehrlich gesagt in Rätseln... Wo kommt eine ID immer vor und in welcher Tabelle kann sie mal fehlen? Was macht die Subroutine rechnen?

*) Du solltest Variablen erst bei der ersten Verwendung deklarieren.
*) Dein Insert wird nicht klappen, weil Du einen Platzhalter hast, aber keinen Parameter übergibst.
*) Soll aus dem Inhalt der Spalte text der MD5-Wert berechnet werden oder woher bekommst Du den Dateinamen?
*) Du machst ein fetchrow_array, speicherst das Ergebnis aber in einem Skalar. Da bekommst Du die Anzahl der Elemente raus.
*) Wenn es kein Ergebnis gibt, wird die while-Schleife nie ausgeführt. Wenn es ein Ergebnis gibt, ist $newdata immer definiert --> Dein Insert wird nie ausgeführt.
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-19 13:02
#34994 #34994
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
Hallo Renee,

Sorry !!
also mir der ID nach bergleich mit RefID ob er in die 2te Tabelle "Daten vorkommt".
sonst er wird in Die Erste TAbelle eingefügt.

Mit rechnen($dbh); sollte so geschrieben #rechnen($dbh);!
------------------------------------------------------------
"*) Soll aus dem Inhalt der Spalte text der MD5-Wert berechnet werden oder woher bekommst Du den Dateinamen?

JA er sollte aus der Spalte Text die MD5 berechnet werden.
------------------------------------------------------------
[CODE]
von deine Antwort habe ich folgendes net verstanden!

*) Du machst ein fetchrow_array, speicherst das Ergebnis aber in einem Skalar. Da bekommst Du die Anzahl der Elemente raus! soll ich dann folgendes schreiben :

while($newdata = $sth->fetchrow_hashref())

IDee??
Danke im Voraus
nepos
 2006-12-19 13:26
#34995 #34995
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Quote
*) Du machst ein fetchrow_array, speicherst das Ergebnis aber in einem Skalar. Da bekommst Du die Anzahl der Elemente raus! soll ich dann folgendes schreiben :
while($newdata = $sth->fetchrow_hashref())

Ja, das würde gehen. Vorher hattest du den Fehler, dass du mit fetchrow_array die Daten geholt hast, das ganze aber in die skalare Variable $newdata gepackt hast. Da hätte ein @newdata hingehört, dann hätte es auch gepasst.

Mir ist immer noch nicht klar, was genau du eigentlich machen willst. Könntest du das mal sauber zusammenschreiben, was du mit dem Code bezweckst?

PS: phpMyAdmin ist keine Datenbank sondern nur ein Administrationsfrontend für MySQL ;)

PPS: Falls es dir darum geht, irgendwelche MD5-Summen auf Inhalte von Spalten zu berechnen, dazu ist kein Perl nötig. MySQL hat von sich aus schon eine MD5-Funktion dabei:
Code: (dl )
SELECT MD5(Text) FROM Rechnen WHERE ID=1

Das berechnet dir von der Spalte Text für die Zeile mit ID=1 die MD5-Summe. Nachlesen kannst du das hier\n\n

<!--EDIT|nepos|1166527645-->
pq
 2006-12-19 13:29
#34996 #34996
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=nour,19.12.2006, 12:02]also mir der ID nach bergleich mit RefID ob er in die 2te Tabelle "Daten vorkommt".[/quote]
bitte??
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
nour
 2006-12-19 13:42
#34997 #34997
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
Also !

ich versuche nochmal zu erklären was ist der ziel meines COdes:
ich habe eine Datenbank. in der Datenban sie die Oben erwähnte Tabellen, die habe ich vorhin gemalt.
ich will in meinem Code folgendes machen:
eine schleife die mir die folgende fälle umfasst.
------------------------------------------------------------
1Fall: überprüfen ob die ID's der Ersten TAbelle mit der Ref ID der zweite TAbelle einstimmig?
1FAll a: Falls (ja )sie sind einstimmig dann dann vergleiche ich die Daten der Erste TAbelle und zwar ob MD5 =new MD5 . im Unterschied Fall dann der Neue MD5 wird in die Tabelle eingetragen.

1Fall B: falls( nein) dass Heisst eine ID ist nicht in eine von der Tablle Vorhanden dann muss ich Ihm ebenfalls eintrgaen.
------------------------------------------------------------

Mittels meinem Unteren COde Will ich alle diese Fälle behandeln.


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
#!/usr/bin/perl -w
use strict;
use warnings;
use DBI;
use Digest::MD5;
my $dbh;
my $raw_data;
my $sqldata;

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);

sub Query{
my $query;
my $sth;
my $execu;
my $newdata;
my $file;
my $ds;
my @ergebnisse;
my @row;
$query = "SELECT RefID FROM &acute;Rechnen ,Daten WHERE Rechnen .ID=DatenRefID ORDER BY TS_LastChange ";
$sth = $dbh->prepare($query) or die "$DBI::errstr\n";
$sth->execute or die "$DBI::errstr\n";

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

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

}
print"$newdata\n";
}
$sth->finish();
}


Er ist nicht Fertig aber das ist alles was könnte ich bis jetzt chaffen :-(.

Danke nochmal\n\n

<!--EDIT|renee|1166535267-->
nepos
 2006-12-19 14:28
#34998 #34998
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Sorry, ich kapiere immer noch nicht, woher du welche Daten nimmst. Z.B. mit dem MD5. Woher kommt da ne neue MD5?
Folgender Select macht nen Full Join auf die beiden Tabellen:
Code: (dl )
SELECT * FROM Rechnen FULL JOIN Daten ON (Rechnen.ID = Daten.RfID);

Folgendes kommt da z.B. (mit deinen Daten und jeweils einem eigenen Datensatz pro Tabelle, der nicht zur anderen passt) raus:
Code: (dl )
1
2
3
4
5
6
7
8
 id | status | data  |              md5sum              | id | status |   datum    | rf_id
----+--------+-------+----------------------------------+----+--------+------------+------
-
1 | 2329 | text1 | cef7ccd89dacf1ced6f5ec91d759953f | 1 | 2911 | 2006-03-19 | 1
2 | 2329 | text2 | fe6123a759017e4a2af4a2d19961ed71 | 2 | 2907 | 2004-07-23 | 2
3 | 1423 | text3 | 265246eadd25390e2406a0d9bd22242b | 3 | 2923 | 2006-08-11 | 3
| | | | 4 | 12234 | 2006-12-17 | 4
5 | 1234 | text5 | 48fa2467e5e644c8a594757d255db7eb | | | |

An den Stellen, wo nun Einträge leer sind musst du was einfügen. Sprich, der SELECT liefert dir beides. Die passenden Einträge plus die, wo das Gegenstück nicht vorhanden ist.
Über die Zeilen kannst du nun iterieren und checken, ob Daten in Tabelle Rechnen nicht in Daten vorkommen und umgekehrt. Abhängig vom Ergebnis deiner Prüfung kannst du dann weitermachen.
Wie gesagt, unklar ist nur, woher die MD5-Summe kommen soll. Wenn du für eine Zeile eine neue MD5 brauchst, dann könntest du das komplett in der DB machen:
Code: (dl )
UPDATE Rechnen SET md5sum=MD5('neuer Wert fuer Pruefsumme') WHERE ID=2

Du musst halt nur den richtigen Wert in das UPDATE-Statement packen.

Ich hoffe, ich liege nicht zu sehr neben dem, was du eigentlich machen willst und meine Ideen bringen dich ein wenig weiter.
nour
 2006-12-19 14:42
#34999 #34999
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
Für dire MD5 soll ich einen Cde Spricht der mir die MD5 Rechnen Soll!
nour
 2006-12-19 14:44
#35000 #35000
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
Hallo,

was betrifft die MD5, ich sollte extra eine Procedure schreiben, die mir die Summe berechnet!

das amche ich erst später aber vorhin wollte ich mit den Vergleiche fetig
pq
 2006-12-19 14:51
#35001 #35001
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=nour,19.12.2006, 13:42]Für dire MD5 soll ich einen Cde Spricht der mir die MD5 Rechnen Soll![/quote]
bitte??
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten



View all threads created 2006-12-19 10:59.