Schrift
[thread]3372[/thread]

Abfrage über zwei Tabellen mit 1:n Beziehung (Seite 2)



<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
Ronnie
 2003-11-09 22:49
#35687 #35687
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=jan10001,09.11.2003, 16:34]Was spricht dagegen den Suchdialog zu erweitern und den User angeben zu lassen was er sucht?[/quote]
Das muss er sogar:
Quote
in einem Suchdialog soll nach Feldern aus beiden Tabellen gesucht werden können.

Suchdialog:
| Dropdownlist v|-| Eingabefeld |-| Suchen-Button |

Der User muss aus einer Dropdownlist das entsprechende Feld auswählen.
jan10001
 2003-11-09 23:38
#35688 #35688
User since
2003-08-14
962 Artikel
BenutzerIn
[default_avatar]
Was ist daran so schwer?

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Tabelle "ansprechpartner"
id
firma_id
name

Tabelle "firma"
id
name


Abfrage:
SELECT DISTINCT b.name
FROM firma b INNER JOIN ansprechpartner a ON b.id = a.firma_id
WHERE a.name = "Name des gesuchten Ansprechpartners"
ORDER BY b.name;
Ronnie
 2003-11-10 10:01
#35689 #35689
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=jan10001,09.11.2003, 22:38]Was ist daran so schwer?[/quote]
Dein Ansatz erzeugt eine klassiche Gruppierung - intern macht MySQL aus DISTINCT ein GROUP BY. Die Ausgabe erfolgt in einer Zeile. Mein Ziel ist aber eine verschachtelte Tabelle s.o., was mit einer reinen Abfrage nicht zu erreichen ist.
renee
 2003-11-10 10:32
#35690 #35690
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Schau Dir mal folgendes an:Testseite

Als Ansprechpartner habe ich folgende Namen:
Martin Fabiani
Bäcker
Morgenroth

Firmen:
smart-websolutions
perl-community
hess-innenausbau
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/
Ronnie
 2003-11-10 10:33
#35691 #35691
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Ein kleines Beispiel für den Ansatz den ich verfolge:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl

use warnings;
use strict;

my $test = { 112 => [19, 24, 57],
113 => [16, 7]
};

push @{$test->{114}}, 8, 31, 32;

for (keys(%$test)) {
print $_,"\n";
print "--", $_,"\n" for (@{$test->{$_}});
}

exit();


Ziel ist die Ausgabe einer hierarchischen Datenstruktur.
Ronnie
 2003-11-10 10:43
#35692 #35692
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
@renee: Ja, genau so stelle ich es mir vor. Ich dachte ich frage die jeweiligen IDs ab wie ich es in meinem Beispiel-Skript auch mache. Einziger Nachteil ist, das man keinen Einfluss auf die Sortierung hat.
renee
 2003-11-10 10:50
#35693 #35693
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
ich habe kleine änderungen gemacht... schau es dir einfach nochmal an!
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/
renee
 2003-11-10 10:51
#35694 #35694
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Eine Sortierung kann man immer noch einbauen... Ich habe in den Änderungen eine Alphabetische Sortierung eingebaut...
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/
Ronnie
 2003-11-10 11:38
#35695 #35695
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Das sieht wirklich sehr gut aus. Ich muss jetzt leider erstmal in unser Labor, werde aber später mal meinen Entwurf posten - sobald der funktioniert ;).
Ronnie
 2003-11-10 12:12
#35696 #35696
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Das ganze noch ohne den CGI-Teil:

Skript
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/perl

use warnings;
use strict;

use DBI;
use CGI;
use HTML::Template;
use CGI::Carp qw(fatalsToBrowser);

my $q = new CGI;
my ($dbh, $sth);
my @firma_loop;
my @contact_loop;
my $daten;

my $aktion = $q->param('aktion') || '';

$dbh = DBI->connect ("DBI:mysql:host=192.168.42.6;database=cdmcrm",
"www-data", "www-data", {PrintError => 0, RaiseError => 1});

&fetch_IDs();
#&fetch_ent() if ($aktion eq 'Suchen');
&fetch_ent();
&html_fill();
$dbh->disconnect();
exit(0);

#
# Ab hier Subroutinen
#

sub fetch_IDs {
my $sth = $dbh->prepare (" SELECT firma.eid, pid
FROM firma
JOIN person
ON person.eid = firma.eid
WHERE Firma LIKE 'N%'
");
$sth->execute();

while (my ($eid, $pid) = $sth->fetchrow_array()) {
push @{$daten->{$eid}}, $pid;
}
$sth->finish();

# DEBUG
# for (keys(%$daten)) {
# print $_,"\n";
# print "--", $_,"\n" for (@{$daten->{$_}});
# }

}

sub html_fill {

# Parameter-loop fuer Suchformular fuellen
my @loop = (
{ value=>'Firma', selected=>'', label=>'Firma' },
{ value=>'Konzern', selected=>'', label=>'Konzern' },
{ value=>'PLZ', selected=>'', label=>'PLZ' },
{ value=>'Ort', selected=>'', label=>'Ort' }
);

# Vorlagen definieren und ausfuellen
my $template = HTML::Template->new(filename => 'selectlist2.tmpl');
$template->param( title => 'Suchformular',
url => $q->url(),
field1_loop => \@loop,
field2_loop => \@loop,
firma_loop => \@firma_loop );

print $template->output;

}

sub fetch_ent {
for (keys(%$daten)) {

my $eid = $_;
my $sth = $dbh->prepare (" SELECT Firma, Strasse, PLZ, Ort
FROM firma
WHERE eid = $eid
");
$sth->execute();

while (my ($firma, $strasse, $plz, $ort) = $sth->fetchrow_array()) {
my @inner_loop = &fetch_contact($eid);
my %row = (
firma => $firma,
strasse => $strasse,
plz => $plz,
ort => $ort,
contact_loop => \@inner_loop
);
push(@firma_loop, \%row);
}
$sth->finish();
}
}

sub fetch_contact {
my $eid = shift @_;
my @contact_loop;

for (@{$daten->{$eid}}) {
my $pid = $_;
my $sth = $dbh->prepare (" SELECT Name, Vorname, Telefon, Fax, Email
FROM person
WHERE pid = '$pid'
");
$sth->execute();

while (my ($nachname, $vorname, $telefon, $fax, $email) = $sth->fetchrow_array()) {
my %row = (
nachname => $nachname,
vorname => $vorname,
telefon => $telefon,
fax => $fax,
email => $email
);

push(@contact_loop, \%row);
}
$sth->finish();
}
return @contact_loop;
}


Template
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
<TMPL_INCLUDE NAME="header.tmpl">
<form action="<TMPL_VAR NAME="url">" method="POST" target="">
<TMPL_INCLUDE NAME="search.tmpl">
</form>
<table>
<TMPL_LOOP name="firma_loop">
<tr>
<td>
<table>
<tr>
<td><TMPL_VAR name="firma"></td>
<td><TMPL_VAR name="strasse"></td>
<td><TMPL_VAR name="plz"></td>
<td><TMPL_VAR name="ort"></td>
</tr>
</table>
</td>
</tr>
<TMPL_LOOP name="contact_loop">
<tr>
<td>
<table>
<tr>
<td><TMPL_VAR name="nachname"></td>
<td><TMPL_VAR name="vorname"></td>
<td><TMPL_VAR name="telefon"></td>
<td><TMPL_VAR name="fax"></td>
<td><TMPL_VAR name="email"></td>
</tr>
</table>
</td>
</tr>
</TMPL_LOOP>
</TMPL_LOOP>
</table>
<TMPL_INCLUDE NAME="footer.tmpl">


Jetzt muss ich aber wirklich los, die Kollegen werden sonst sauer.

Vielen Dank für eure Hilfe!
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2003-11-07 14:55.