Schrift
[thread]11601[/thread]

anfängerfrage zu perl und mysql



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
CyrusTV
 2008-04-08 11:11
#108063 #108063
User since
2008-04-07
5 Artikel
BenutzerIn
[default_avatar]
hi,

ich habe eine datenbank mit 2 tabellen (jeweils die spalten hardwareadresse, zeit, datum). jetzt frage in der ersten tabelle ab, welche hardwareadressen vorhanden sind und zu welcher zeit. als ergebnis bekomme ich :

1x:xx:xx:xx 20:12:54
2x:xx:xx:xx 22:36:82
usw.

nun möchte ich mit den hardwareadressen in tabelle 2 gehen, und schauen, zu welcher zeit die dort eingetragen wurden. nur leider weiss ich nicht, wie ich dass mache.

hier mal der code für die abfrage der tabelle 1:


Code (perl): (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
#!/usr/bin/perl

use DBI;
use strict;

# Datenbankdaten----------------------------------------------------------------
my $dbhost = "xxx.xxx.xxx.xxx";
my $port = "3306";
my $dbname = "abc";
my $username = "NAME";
my $pw = "PASSWORT";
my $data1 = "DBI:mysql:$dbname;$dbhost;$port";
my $data2 = DBI->connect($data1, $username, $pw);
# ------------------------------------------------------------------------------

#Abfrage LSA1-------------------------------------------------------------------
my $abfrage1 = "SELECT MAC, Zeit FROM LSA1 GROUP BY MAC";
my $prepare_abfrage1 = $data2->prepare($abfrage1);      
$prepare_abfrage1->execute();
my @bt_geraet1;
while(@bt_geraet1 = $prepare_abfrage1->fetchrow_array)
        {
         print $bt_geraet1[0]." ".$bt_geraet1[1]." \n";
        }
$prepare_abfrage1->finish();
#-------------------------------------------------------------------------------
$data2->disconnect();
renee
 2008-04-08 11:23
#108064 #108064
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Befehl für zweite Tabelle, mit ?-Notation (siehe auch Wiki-Artikel)
my $statement = qq~SELECT Zeit FROM tabelle2 WHERE MAC = ?~;
# wieder ein prepare()
my $sth = $data2->prepare( $statement ) or die $data2->errstr;

# für die Debug-Ausgabe
use Data::Dumper;

while(@bt_geraet1 = $prepare_abfrage1->fetchrow_array)
        {
         print $bt_geraet1[0]." ".$bt_geraet1[1]." \n";

         # Abfrage auf 2. Tabelle ausführen und MAC-Adresse verwenden
         $sth->execute( $bt_geraet1[0] ) or die $data2->errstr;
         my $ergebnis = $sth->fetchall_arrayref();
        
         # Debug-Ausgabe
         print Dumper $ergebnis;
        }
$prepare_abfrage1->finish();
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/
CyrusTV
 2008-04-08 11:57
#108067 #108067
User since
2008-04-07
5 Artikel
BenutzerIn
[default_avatar]
danke sehr. ich probier das im laufe des tages mal aus
CyrusTV
 2008-04-09 13:35
#108127 #108127
User since
2008-04-07
5 Artikel
BenutzerIn
[default_avatar]
so, jetzt hatte ich etwas zeit und bin dabei, den virschlag umzusetzen. ich genke er funktioniert ganz gut. jetzt muss ich nur noch sehen, dass ich den fehler abfange, wenn ein wer NULL ist:

tabelle1 tabelle2

xx:xx:xx:x1 20:01:12 xx:xx:xx:x1 20:06:44
xx:xx:xx:x2 20:02:14 xx:xx:xx:x3 21:35:55
xx:xx:xx:x3 21:01:42

es fehlt also in der 2 tabelle xx:xx:xx:x2.
ich frage nun tabelle 1 ab (wie code im obigen post). jetzt muss ich zuerst schauen, ob die adressen aus tabelle 1 in tabelle 2 vorkommen und wenn ja, dann brauch ich die zeit aus tabelle 2. im weiteren verlauf will ich dann die zeitwerte für eine adresse vergeichen und auswerten, aber das werde ich anders machen.

mein problem ist die fehlermeldung, wenn eine adresse in tabelle 1 aber nicht in 2 vorkommt.

bin leider n perl-anfänger, aber ich bin dabei, mich reinzufuchsen
renee
 2008-04-09 13:45
#108128 #108128
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wie wäre es, das alles in einer Abfrage zu "erschlagen"?

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
# Befehl für zweite Tabelle, mit ?-Notation (siehe auch Wiki-Artikel)
my $statement = qq~SELECT tabelle2.mac, tabelle1.zeit, tabelle2.zeitspalte FROM tabelle1, tabelle2 WHERE tabelle1.mac = tabelle2.mac~;

my $sth = $data2->prepare( $statement ) or die $data2->errstr;

# für die Debug-Ausgabe
use Data::Dumper;

while( my @row = $sth->fetchrow_array){
         print sprintf "%s -> %s - %s\n", @row;
}
$sth->finish();
(ungetestet)
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/
nepos
 2008-04-09 14:03
#108130 #108130
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Was ist bei dem Select wenn eine MAC nur in Tabelle1, aber nicht in Tabelle2 ist? Dann kriegst gar nix fuer diese MAC.
CyrusTV
 2008-04-09 14:15
#108133 #108133
User since
2008-04-07
5 Artikel
BenutzerIn
[default_avatar]
die tilde am ende der statement weg und es macht, was es soll und gibt die richtigen sachen aus. DANKE sehr
nepos
 2008-04-09 15:40
#108139 #108139
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Die Tilde gehoert da aber schon hin, da renee mit qq~...~ das Select-Statement umschliesst.
CyrusTV
 2008-04-14 12:46
#108345 #108345
User since
2008-04-07
5 Artikel
BenutzerIn
[default_avatar]
ich weiss, dass die tilde nicht umsonst da ist, aber nur mit tilde gehts nicht.
hab nun die tilde drin, aber davor rinr { und am ende nach der tilde ein }. damit gehts.

danke für eure hilfe
nepos
 2008-04-14 14:28
#108351 #108351
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Wenn du das Statement mit qq{...} umschliesst, dann brauchts auch gar keine Tilde. Verstehe dein Problem mit der Tilde grade nicht so ganz...
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2008-04-08 11:11.