Schrift
[thread]5963[/thread]

Wiedermal Probleme mit Arrays



<< >> 7 Einträge, 1 Seite
Arasiel
 2003-12-11 11:10
#75495 #75495
User since
2003-11-12
39 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe einen Array namens @all_things_from_array_1.
Darin habe ich folgendes gespeichert:

Code: (dl )
1
2
3
4
5
6
7
8
9
Tabelle_X where Bedingung1 = '...' and Bedingung2 = '...'
Tabelle_X where Bedingung1 = '...' and Bedingung2 = '...'
Tabelle_X where Bedingung1 = '...'
Tabelle_Y where Bedingung1 = '...' and Bedingung2 = '...'
Tabelle_Y where Bedingung1 = '...'
Tabelle_Z where Bedingung1 = '...' and Bedingung2 = '...'
.
.
.

Ich baue in diesem Array also SQL-Anweisungen zusammen.
Jetzt fehlen mir noch die Felder, die von der jeweiligen Tabelle ausgelesen werden sollen.
Dazu habe ich einen anderen Array (@sort_array), der folgendermassen aussieht:
Code: (dl )
1
2
3
4
5
6
7
Tabelle_A : Feld1 Feld2 Feld3
.
.
.
Tabelle_X : Feld1 Feld2 Feld3
Tabelle_Y : Feld1 Feld2
Tabelle_Z : Feld1 Feld2 Feld3

Jetzt möchte ich meine SQL-Anweisung komplett zusammenbauen, aber alles was ich versucht habe, funktionierte nicht...

Es sollen also die beiden Tabellennamen verglichen werden und wenn die übereinstimmen bzw. solange sie übereinstimmen
sollen die jeweiligen Felder einer Tabelle ausgelesen werden.
Der Ergebnis-Aray soll dann folgendermassen aussehen:
Code: (dl )
1
2
3
4
5
6
select Feld1,Feld2,Feld3 from Tabelle_X where Bedingung1 = '...' and Bedingung2 = '...'
select Feld1,Feld2,Feld3 from Tabelle_X where Bedingung1 = '...' and Bedingung2 = '...'
select Feld1,Feld2,Feld3 from Tabelle_X where Bedingung1 = '...'
select Feld1,Feld2 from Tabelle_Y where Bedingung1 = '...' and Bedingung2 = '...'
select Feld1,Feld2 from Tabelle_Y where Bedingung1 = '...'
select Feld1,Feld2,Feld3 from Tabelle_Z where Bedingung1 = '...' and Bedingung2 = '...'

Info: Es folgt öfters auf die gleiche Tabelle ein Select, weil sich die Bedingungen unterscheiden.

Das ist doch irgendwie möglich oder?

Vielen Dank im Voraus für die Hilfe!

Gruss,

Markus
renee
 2003-12-11 11:54
#75496 #75496
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wie ist Dein 2. Array aufgebaut?? Ist das Tabelle_A: Feld1, Feld2 eine einzige Zeichenkette??

Es qäre einfacher, wenn Dein 2. Array als Hash existieren würde:
Code: (dl )
1
2
%hash = (Tabelle_A => ['Feld1', 'Feld2'],
Tabelle_B => ['Feld1','Feld2','Feld3']);


Dann könntest Du es so machen:
Code: (dl )
1
2
3
4
foreach(@all_things_from_array_1){
 $statement = "SELECT ".$hash{(split(/\s/,$_))[0]}." ".$_;
 print $statement;
}
\n\n

<!--EDIT|renee|1071136519-->
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/
Arasiel
 2003-12-11 12:05
#75497 #75497
User since
2003-11-12
39 Artikel
BenutzerIn
[default_avatar]
Wie ist Dein 2. Array aufgebaut?? Ist das Tabelle_A: Feld1, Feld2 eine einzige Zeichenkette??

Tabelle_A : Feld1 Feld2 Feld3
-> ist eine Zeichenkette bzw. ein Arrayelement
Crian
 2003-12-11 13:34
#75498 #75498
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Das macht doch nichts... man kann doch im zweiten Array nach ':' splitten.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Crian
 2003-12-11 13:47
#75499 #75499
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
So z.B.:

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
#!/usr/bin/perl
use strict;
use warnings;

use Data::Dumper;

my @array1 = (
"Tabelle_X where Bedingung1 = '...' and Bedingung2 = '...'",
"Tabelle_X where Bedingung1 = '...' and Bedingung2 = '...'",
"Tabelle_X where Bedingung1 = '...'",
"Tabelle_Y where Bedingung1 = '...' and Bedingung2 = '...'",
"Tabelle_Y where Bedingung1 = '...'",
"Tabelle_Z where Bedingung1 = '...' and Bedingung2 = '...'",
);

my @array2 = (
"Tabelle_X : Feld1 Feld2 Feld3",
"Tabelle_Y : Feld1 Feld2",
"Tabelle_Z : Feld1 Feld2 Feld3",
);

print Dumper \@array1;
print Dumper \@array2;

my @array3;

my $i1 = 0;
my $i2 = 0;

while ($i1 < scalar @array1 and $i2 < scalar @array2) {
my ($tab1, $where) = split / /, $array1[$i1], 2;
my ($tab2, $fields) = split / : /, $array2[$i2], 2;

#print "i1=$i1, i2=$i2, tab1=$tab2, tab2=$tab2, where=$where, fields=$fields\n";

if ($tab1 eq $tab2) {
push @array3, "select $fields from $tab1 $where";
++$i1;
}
else {
++$i2;
}
}

print Dumper \@array3;


Ausgabe:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$VAR1 = [
'Tabelle_X where Bedingung1 = \'...\' and Bedingung2 = \'...\'',
'Tabelle_X where Bedingung1 = \'...\' and Bedingung2 = \'...\'',
'Tabelle_X where Bedingung1 = \'...\'',
'Tabelle_Y where Bedingung1 = \'...\' and Bedingung2 = \'...\'',
'Tabelle_Y where Bedingung1 = \'...\'',
'Tabelle_Z where Bedingung1 = \'...\' and Bedingung2 = \'...\''
];
$VAR1 = [
'Tabelle_X : Feld1 Feld2 Feld3',
'Tabelle_Y : Feld1 Feld2',
'Tabelle_Z : Feld1 Feld2 Feld3'
];
$VAR1 = [
'select Feld1 Feld2 Feld3 from Tabelle_X where Bedingung1 = \'...\' and Bedingung2 = \'...\'',
'select Feld1 Feld2 Feld3 from Tabelle_X where Bedingung1 = \'...\' and Bedingung2 = \'...\'',
'select Feld1 Feld2 Feld3 from Tabelle_X where Bedingung1 = \'...\'',
'select Feld1 Feld2 from Tabelle_Y where Bedingung1 = \'...\' and Bedingung2 = \'...\'',
'select Feld1 Feld2 from Tabelle_Y where Bedingung1 = \'...\'',
'select Feld1 Feld2 Feld3 from Tabelle_Z where Bedingung1 = \'...\' and Bedingung2 = \'...\''
];
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Arasiel
 2003-12-11 15:56
#75500 #75500
User since
2003-11-12
39 Artikel
BenutzerIn
[default_avatar]
Wenn ich statt @array1 und @array2 meine beiden Arrays nehme,
wird $i2 nicht hochgezählt...
Die Folge ist, dass inder Select-Anweisung immer die gleichen Felder angegeben werden...
Crian
 2003-12-11 18:20
#75501 #75501
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Da in meinem Code korrekt hochgezählt wird, musst Du Deinen wohl mal zeigen. Sind Deine Arrays vielleicht nicht sortiert?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< >> 7 Einträge, 1 Seite



View all threads created 2003-12-11 11:10.