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

sehr Komplexe Abfrage: logik Problemchen



<< |< 1 2 3 >| >> 27 Einträge, 3 Seiten
eisbeer
 2004-02-07 18:03
#35946 #35946
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo erstmal,

Folgendes:
Ich muss ein Auftragsorganisationssystem bauen, das auf
einer MySQL Datenbank basiert. Mein erster Schritt ist es
jetzt, erstmal alle Aufträge, die in der Tabelle "tasks" ge-
speichert sind, auszugeben. Aber da fürdiese ganzen
Aufträge in anderen Tabelle noch ausgabe-relevante Infor-
mationen stehen (z.B. der Kunde, in "tasks" als KID muss
aus "adressbook" gleich mitausgelesen werde etc. ...)
und es noch keine Foreign-Keys gibt, muss ich halt eine
Monsterabfrage machen.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
aus "tasks"
-----------
ID, TGID, TID, KID, LID, RID, ident_name, short_desc, gave_in_tmstmp

aus "task_groups"
-----------------
TGID, name

aus "task_types"
----------------
TID, abbr

aus "adressbook"
----------------
ID, firma, name, vorname

Das sind alle relevanten Felder.

Meine momentantes Abragestatement sieht so aus:
[sql]SELECT t.ID AS tID, t.TGID AS tTGID, t.TID AS tTID, t.KID, LID, RID, ident_name, short_desc, gave_in_tmstmp,
tg.TGID AS tgTGID, tg.name AS tgname,
tt.TID AS ttTID, abbr,
a.ID AS aID, a.name AS aname, firma, vorname
FROM tasks AS t,
task_groups AS tg,
task_types AS tt,
adressbook AS a
WHERE ident_name LIKE '%%' OR short_desc LIKE '%%' AND t.TGID = tg.TGID AND t.KID = a.ID
ORDER BY gave_in_tmstmp DESC LIMIT 0, 25 ;[/sql]
(Ja mir wird auch schlecht wenn ichs anschau...)

tasks:
http://public.eisbeer.ath.cx/projekte/jehle-rv.de/...
Das Problem ist, das ich jetzt nicht schön meine 2
Aufträge aus "tasks" ausgegeben bekommen, sondern
17 Stück:
http://public.eisbeer.ath.cx/projekte/jehle-rv.de/...
Wie ihr seht, stimmt da was nicht, besonders weil er für die
Aufträge, bei denen garkein tTGID gesetzt ist, trozdem tgTGID
ausliest, das gleiche bei abbr...

Ich hoffe ihr versteht mich, aber ich komm nicht weiter:
Also, wie bekomme ich hin, das er mir für die Aufträge in
"tasks" alle Daten ausliest, die mit denen in den anderen
genannten Tabellen übereinstimmen ?

Vielen Dank,
Claudi\n\n

<!--EDIT|eisbeer|1076170080-->
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
eisbeer
 2004-02-07 18:05
#35947 #35947
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ignoriert mal das mit dem LIKE, das ist erst in späteren Abfagen relevant :)
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
renee
 2004-02-07 18:15
#35948 #35948
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
was Du auf jeden Fall benutzen solltest ist ein "inner join". So wie Du das machst, bekommst Du ein Kreuzprodukt aller Tabellen, was Dir ein vielfaches an Ergebnissen bringt, als eigentlich richtig wäre...[sql]SELECT
tasks.ID, tasks.TGID, tasks.TID, tasks.KID, tasks.LID, tasks.RID, tasks.ident_name, tasks.short_desc, tasks.gave_in_tmstmp, task_groups.name, task_types.abbr, addressbook.firma, addressbook.name, addressbook.vorname
FROM tasks INNER JOIN task_groups
INNER JOIN task_types
INNER JOIN addressbook
ON tasks.KID = addressbook.ID
ON tasks.TID = task_types.TID
ON tasks.TGID = task_groups.TGID[/sql]\n\n

<!--EDIT|renee|1076170602-->
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
 2004-02-07 18:21
#35949 #35949
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Naja, das ORDER BY und die WHERE-Bedingung habe ich jetzt außen vorgelassen... Das musst Du halt noch selbst einbauen.

Die Methode ..FROM XX, YY, ZZ... wird auch mit zunehmender Tabellengröße (Anzahl der Einträge) immer langsamer, da hier eine übermäßig große temporäre Tabelle angelegt wird: Anzahl der Einträge aus XX * Anzahl der Einträge aus YY * Anzahl der Einträge aus ZZ

Bei INNER JOINs ist dann auch die Reihenfolge der ONs wichtig. Die ist dann immer umgekehrt zu den INNER JOINs...
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/
eisbeer
 2004-02-07 18:25
#35950 #35950
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich probiers gleich mal aus, danke !
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
eisbeer
 2004-02-07 18:34
#35951 #35951
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ähm ich verstehs net ganz, kannst du mir bitte mal die Funktionsweise erläutern, ich
bekomme mit deinem Statement nämlich n Syntaxerror ...
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
renee
 2004-02-07 18:39
#35952 #35952
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
kannst Du mir mal den Syntaxerror schreiben??
SELECT ... // alle Spalten, aber keine Doppelt
FROM // "zentrale" Tabelle
INNER JOIN // nächste Tabelle...
ON // Die Spalten, die in den jeweiligen Tabellen die gleiche Bedeutung haben (z.B. steht in tasks.KID und addressbook.ID die ID des Kunden)
ob das jeweils stimmt, musst Du selbst überprüfen. Ich habe natürlich am Ende noch ein Semikolon vergessen...
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
 2004-02-07 18:41
#35953 #35953
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Überprüf mal, ob ich auch alle Tabellen- und Spaltennamen richtig geschrieben habe. Habe ja keine DB zum Testen...
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/
eisbeer
 2004-02-07 18:44
#35954 #35954
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Kann es vielleicht sein, das du so meintest:
Code: (dl )
1
2
3
4
FROM tasks
INNER JOIN task_groups ON tasks.TGID = task_groups.TGID
INNER JOIN task_types ON tasks.TID = task_types.TID
INNER JOIN addressbook ON tasks.KID = addressbook.ID


So geht's nämlich !?
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
renee
 2004-02-07 18:55
#35955 #35955
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ok, das hängt auch ein wenig vom DBMS ab. Ich habe es so gelernt, wie ich es geschrieben habe...
Aber wenn es so, wie Du es beschrieben hast, funktioniert, dann ist es ja gut...
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/
<< |< 1 2 3 >| >> 27 Einträge, 3 Seiten



View all threads created 2004-02-07 18:03.