TP Underground Lounge 07/08
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 26.11.2002, 17:10   #1
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein
Question

zwei abfragen miteinander verknuepfen


hi leute,

gibt es eine moeglichkeit, zwei abfragen miteinander zu verkuepfen?

("SELECT * FROM table1,table2,table3 WHERE merkmal1 LIKE '%$surch'") AND ("SELECT * FROM other_table WHERE merkmal2 LIKE '%$surch'")

sowas in der art nur, dass das ding hier nicht hinhaut.

eine andere moeglichkeit waere vielleicht, zwei getrennte abfragen in zwei variablen zu packen, diese zu mischen, zu sortieren und dann auszugeben.

koennte mir da vielleicht jemand beim code etwas auf die spruenge helfen?

gruss,
theo
theo ist offline   Mit Zitat antworten


Alt 26.11.2002, 17:46   #2
TP-Specialist
 
Benutzerbild von mike
 
Registriert seit: Jan 2002
Ort: TP/Dynamik
mike bringt sich richtig ein
www.sqlcourse.com und http://www.sqlcourse2.com.
arbeite dich durch die wirklich guten sql - grundlagentutorials durch.
wenn du dann noch fragen hast, dann melde dich.
__________________
Gehelft? Hier kannst du dich bedanken.

mike
mike ist offline   Mit Zitat antworten
Alt 26.11.2002, 19:36   #3
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein

also ...


in den tut´s habe ich nicht bahnbrechend neues gefunden oder gelernt.
es scheitert ja schon daran, dass er bei der abfrage schon scheitert, wenn ich ihm eine zweite tabelle zum durchsuchen hinzufuege. da haben auch die tut´s nix aendern koennen. er macht´s eben einfach nicht.

theo
theo ist offline   Mit Zitat antworten
Alt 26.11.2002, 20:05   #4
TP-Specialist
 
Benutzerbild von mike
 
Registriert seit: Jan 2002
Ort: TP/Dynamik
mike bringt sich richtig ein
wow. bist ja in eiltempo durch die tuts durchgerast.
wenn du dann auch noch alle themen mit den aufgaben durchgespielt hast und diese auch verstanden hast. respekt.

nur wundert es mich dann, warum du nicht 1+1 zusammenzählst und die aufgabe 10 in http://sqlcourse2.com/joins.html
mit deinem query vergleichst und sebst rausfindest warum deine query nicht funktionieren kann.

basics - theo - basics.
__________________
Gehelft? Hier kannst du dich bedanken.

mike
mike ist offline   Mit Zitat antworten
Alt 26.11.2002, 20:25   #5
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein

vielleicht sitze ich heute auch schon zu lange an den sachen ...


kann sein. langsam fangen die buchstaben und zahlen an, ein eigenleben zu fuehren. aber soweit kriege ich das noch zusammen:
die abfrage, so simpel sie jetzt auch ist, klappt einfach nicht.

SELECT * FROM table1, table2 WHERE kriterium LIKE '%$surch%'

die variable $surch hat auf jeden fall einen wert. hab das schon mit ´nem echo gecheckt. solange es nur eine tabelle ist, klappt es. kommt eine zweite dazu, ist es aus. wenn das schon nicht geht ... !?
aber selbst in den tut´s steht es so drin und haut doch nicht hin, basics hin oder her.

gruss,
theo

Geändert von theo (26.11.2002 um 20:31 Uhr).
theo ist offline   Mit Zitat antworten
Alt 26.11.2002, 20:34   #6
TP-Specialist
 
Benutzerbild von mike
 
Registriert seit: Jan 2002
Ort: TP/Dynamik
mike bringt sich richtig ein
die seite hört aber NICHT beim ersten codebeispiel auf - die kann man scrollen.
wenn du weitergelesen hättest wärst du wahrscheinlich bei dem punkt angekommen, der die verknüpfung von normalisierten tabellen beschreibt.

---
Notice how each of the tables have a common "cusomer_number" column. This column, which contains the unique customer number will be used to JOIN the two tables. Using the two new tables, let's say you would like to select the customer's name, and items they've purchased. Here is an example of a join statement to accomplish this:


SELECT customer_info.firstname, customer_info.lastname, purchases.item
FROM customer_info, purchases
WHERE customer_info.customer_number = purchases.customer_number;

This particular "Join" is known as an "Inner Join" or "Equijoin". This is the most common type of "Join" that you will see or use.
---

weiters solltest du bedenken, dass alle felder die in den beiden tabellen gleich heissen und ausgegeben werden sollen den tabellennamen davor benötigen. das gilt auch für die whereklausel.
__________________
Gehelft? Hier kannst du dich bedanken.

mike
mike ist offline   Mit Zitat antworten
Alt 27.11.2002, 12:51   #7
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein
Wink

zweite runde


wie es aussieht, ist es nicht immer ganz leicht. ich hab mir die sachen nochmal in ruhe angesehen und meine abfragen umgestellt. aber es waere ja langweilig, wenn es nicht schon wieder schwierigkeiten gaebe.

die abfragen sahen so:

SELECT table1.colname,table2.colname FROM table1, table2 WHERE table1.colname LIKE '%$surch%' OR table2.colname LIKE '%$surch%'

und so:

SELECT table1.colname,table2.colname FROM table1 INNER JOIN table2 ON table1.colname LIKE '%$surch%' OR table2.colname LIKE '%$surch%'

aus.

erstaunlicherweise liefern sie bei einer abfrage, die lediglich ein ergebnis ergeben sollte, eine anzahl von 47 angaben. und zwar bei beiden abfrage und unterschiedlichen suchbegriffen. es sind immer 47. warum?

gruss,
theo

Geändert von theo (27.11.2002 um 13:40 Uhr).
theo ist offline   Mit Zitat antworten
Alt 27.11.2002, 14:04   #8
TP-Specialist
 
Benutzerbild von mike
 
Registriert seit: Jan 2002
Ort: TP/Dynamik
mike bringt sich richtig ein
deine statements sind semantisch nicht richtig, da du die tabellen nicht miteinander in beziehung gestellt hast (primärschlüssel - fremdschlüssel).
somit wirst du eine vielzahl von datesätzen bekommen, da sich die abfrage 'auskreuzt' = jeder datensatz der ersten tabelle mit jedem ds der zweiten wird in beziehung gestellt und ausgegeben.

prizipiell solltest du dir mal klar werden wozu man joins verwendet:

tabelle 1
rubrikID|rubrikname

tabelle 2
artikelID|artikelname|rubrikID

du siehst hier zwei tabellen, die einen normalisierten bezug zueinander über das feld rubrikID haben (t1=primärschlüssel, t2=sekundärschlüssel) und dadurch eindeutig zuzuordnen sind.

nun verwendet man joins oder auch views genannt um hier eine einen gesammelten datensatz zu erhalten:
z.b. alle artikelnamen und die dazugehörigen rubriknamen

artikelID|artikelname|rubrikname

dies erhältst du indem du wie in kaptitel 10 beschrieben vorgehst.

natürlich ist das nur ein ganz kleiner abriss von möglichkeiten und anwendungsgebieten von sql.

haben deine tabellen keinen eindeutigen bezug zueinander, wirst du diese nicht joinen können. da ich dein datenmodell jedoch nicht kenne, und du diesbezüglich auch keine angaben gemacht hast, denke ich mal, dass dem nicht der fall ist.
__________________
Gehelft? Hier kannst du dich bedanken.

mike
mike ist offline   Mit Zitat antworten
Alt 28.11.2002, 11:26   #9
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein

manchmal ist es vielleicht wirklich nicht verkehrt, ...


wenn man sich selbst durch alles durchquaehlen muss.

ok, ich habe jetzt die abfragen alle durchgearbeitet und bin zu folgendem ergebnis gekommen:

SELECT DISTINCT table1.spalte1,table1.spalte2,table2.spalte FROM table1,table2 WHERE (table1.kat_id = table2.kat_id) AND (spalte LIKE '%$surch%' OR spalte1 LIKE '%$surch%' OR spalte2 LIKE '%$surch%')

eine testabfrage sollte insgesamt 6 ergebnisse liefern, die alle aus der der tabelle1 stammen sollen (3 aus der spalte1 und 3 aus spalte2).
die tabelle2 enthaelt 47 zeilen. das ergebnis der abfrage sind 141 datensaetze (47 x 3), bei denen er alle moeglichen kombinationen der daten untereinander ausgibt.
fuer mich scheint er die daten zu mischen und dann erst auszugeben. er sollte es doch aber umgekehrt tun?! wo hab ich hier einen fehler in der abfrage gemacht?

gruss,
theo
theo ist offline   Mit Zitat antworten
Alt 28.11.2002, 12:14   #10
TP-Specialist
 
Benutzerbild von mike
 
Registriert seit: Jan 2002
Ort: TP/Dynamik
mike bringt sich richtig ein
Zitat:
wenn man sich selbst durch alles durchquaehlen muss.
...der weg ist das ziel, theo. ich nenn sowas lernen. nicht durchquälen.

nochmal meine frage:
sind deine beiden tablellen voneinander abhängig?
oder sind das zwei von deinen sechs kathegorie-zaubertabellen?
wenn dem so ist, wirf den join weg und mach zwei queryies.

zum mitschreiben: ein join ist dann sinnvoll wenn ich eine teilmenge von feldern aus 2 oder mehr zueinander in beziehung stehenden tabellen bekommen will.

hab ich keine beziehung zwischen den tabellen, bringt der jonin nur müll. = 141 datensätze
__________________
Gehelft? Hier kannst du dich bedanken.

mike
mike ist offline   Mit Zitat antworten
Alt 28.11.2002, 13:31   #11
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein

meine sechs zaubertabellen ...


habe ich zu einer zusammengelegt (was ich wegen der uebersichtlichkeit immer vermeiden wollte). jetzt stimmen wirklich alle relationen innerhalb der db.

tabelle0 teilt die gesamtdaten in sechs verschiedene hauptkategorien auf (schluessel: kat_id)

denen werden in tabelle2 entsprechende subkategorien zugeordnet (schluessel: kat_id und sub_id)

ttabelle1 enthaelt alle datensaetze, die sich ueber die sub_id und kat_id (enthaelt noch eine eigene id, um die datensaetze eindeutig zuzuordnen)

ich nehme daher einfach mal an, dass die db einen logischen und funktional richtigen aufbau hat.

ich bin auch extra nochmal die schluesselfelder alle durchgegangen. der fehler steckt meiner ansicht nach in der syntax vom select
theo ist offline   Mit Zitat antworten
Alt 28.11.2002, 13:45   #12
TP-Specialist
 
Benutzerbild von mike
 
Registriert seit: Jan 2002
Ort: TP/Dynamik
mike bringt sich richtig ein
ok.
wenn du als schlüssel für die tab1 und tab2 einen zusammengesetzten schlüssel verwendest, musst du diesen auch in deinem select entsprechend anführen.

wobei ich an deiner stelle den doppelschlüssel generell überdenken würde, da er imho nicht benötigt wird. ein ds in tab1 wird eindeutig durch die subID aus tab2 zugeordnet - soweit ich das verstehe.

also:
tab0:
katID| hauptkategoriename

tab2:
subID|katID|unterkategoriename

eine hauptkategorie hat mehrere sub und eine sub passt genau zu einer hauptkategorie= 1:n beziehung.

tab1:
artikelID|subID|aritkelname

eine subkategorie hat mehere artikel und ein artikel passt genau zu einer subkategorie = ebenfalls 1:n beziehung. das macht dann auch die wartung einfacher. wobei ich dir da eine rudimentäre eingabemaske für die pflege nahelegen möchte. skills dazu sowas zu machen solltes du bereits haben.

also:
- entweder doppelschlüssel in die query einbauen
- oder tabellen vereinfachen (mein tip)

tipp noch zum select: nimm auch bei der where klausel die tabellennamen mit.
__________________
Gehelft? Hier kannst du dich bedanken.

mike
mike ist offline   Mit Zitat antworten
Alt 28.11.2002, 14:09   #13
TP-Junior
 
Benutzerbild von stereo
 
Registriert seit: Nov 2002
stereo macht alles soweit korrekt
aaalso moin erstmal

tabelle0 (hauptkategorien)
tabelle2 (subkategorien)
tabelle1 (datensaetze)

schluessel sehen so aus?
tabelle0 (kat_id(prim key), kat_name)
tabelle2 (subkat_id (prim key), subkat_name, oberkat_nr(fremdschluessel))

tabelle1 (datensatz, kat_nr(fremdschluessel), subkat_nr(fremdschluessel))


also join ueber alles

SELECT daten.wasduwillst
FROM tabelle1, tabelle2, tabelle0
WHERE //erster join daten mit kategorie

tabelle1.kat_nr = tabelle0.kat_id

AND //zweiter join mit subkats

tabelle1.subkat_nr = tabelle2.subkat_id

//und nun einschraenkungen

AND ( x LIKE 'suchdings' OR y LIKE 'suchdings');

was meint ihr dazu?


sind vielleicht eher die prim- fremdschluesselbeziehungen "schief"?

aber die chackt ja mysql eh' nicht richtig ab

soweit erstmal
tschoe
"der neue"
stereo ist offline   Mit Zitat antworten
Alt 28.11.2002, 14:16   #14
TP-Junior
 
Benutzerbild von stereo
 
Registriert seit: Nov 2002
stereo macht alles soweit korrekt
nochmal ich... wollte mal ein bildchen meines gemeinten erm's mitgeben. damit kann man am leichtesten den ueberblick behalten finde ich
Angehängte Grafiken
Dateityp: png shot-db-erm.png (14,7 KB, 54x aufgerufen)
stereo ist offline   Mit Zitat antworten
Alt 28.11.2002, 14:28   #15
TP-Junior
 
Benutzerbild von stereo
 
Registriert seit: Nov 2002
stereo macht alles soweit korrekt
nun meine frage, wie ist das mit der referenzierung von fremdschluesseln in mysql?

die werden ja angeblich nicht geprueft, muss man sie dann dennoch als solche ausweisen?

oder macht man das nur fuer kommende versionen, die das dann koennen?
stereo ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
zwei abfragen miteinander verknuepfen zwei abfragen miteinander verknuepfen
« cookies prüfen | Mitfahrbörse/-zentrale »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:59 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



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

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