Seite 1 von 1

[MySQL] 5 Tabellen abfragen mit einem SELECT...

Verfasst: 12.05.2009, 10:56
von JohnBi
Ich habe 5 Tabellen ...
tab0
id int(11)
auto int(1)
fahrrad int(1)
moto int(1)

tab1
id int(11)
birne int(1)
aepfel int(1)
gemuese int(1)
usw.

tab2
id int(11)
kartoffel int(1)
tomaten int(1)
usw.


Nun möchte ich eine Abfrage starten, der mir zeigt wo tomaten=1, birne=1 und auto=1 bei id=5 mit einer select abfrage...

wie stelle ich das an?

Code: Alles auswählen

select distinct tab0.id from tab0,tab1,tab2i where tomaten=1 AND birne=1 AND auto=1
das klappt auch, das erste Ergebnis ist auch das was alle 3 Anforderungen entspricht aber alle anderen folgenden stimmen nicht ...

Verfasst:
von

Verfasst: 12.05.2009, 11:29
von DZVO
Also deine Frage hab ich nicht ganz verstanden
aber hier ein Denkansatz

Code: Alles auswählen


Select * 
FROM tab0 t0 
INNER JOIN tab1 t1 ON t1.id = t2.id
INNER JOIN tab2 t2 ON t2.id = t1.id
WHERE t0.id = xxx

Verfasst: 12.05.2009, 11:32
von TheRob
jip, mit nem Join geht es. wobei ich hier nen inner join machen würde.

Verfasst: 12.05.2009, 11:36
von JohnBi
Ok, vielen Dank, ich hab mich mies ausgedrückt.

Ich suche eine Möglichkeit alle Ergebnisse wo diese 3 Dinge zutreffen,

also tomaten=1, birne=1 und auto=1

Ich versuche deinen Denkansatz mal umzusetzen und bissel zu frikkeln. Danke

Verfasst: 12.05.2009, 11:44
von TheRob
sag vllt. mal ein Beispiel was logisch ist, dann geht es besser zu helfen. aber nen join ist grundsätzlich gut.

allerdings.,. ist id nen PrimaryKey und gibt es ForeignKeys?

und was hat obst, gemüse und autos miteinander zu tun? :-)

Verfasst: 12.05.2009, 11:47
von JohnBi
jo id ist immer primary key

also, was soll ich zur Logik sagen, das sind eben Tabellen mit Eigenschaften die entweder auf 1 oder auf 0, vorhanden oder nicht vorhanden sind, das sind dutzende Tabellen.

und nun möchte jemand zum beispiel jemand eben die ID suchen mit den Eigenschaften x=1 y=1 und z=1

und diese eigenschaften befinden sich in dutzenden tabellen...

ich hab nun ein paar Testläufe gemacht mit der Variante von DVZO mit Inner JOIN und es scheint super zu klappen, wenn nochmal was sein sollte melde ich mich , danke vielmals an alle.

Verfasst: 12.05.2009, 11:51
von TheRob
na da würde ich dir aber mal ne überprüfung deiner tabellen empfehlen. grundsätzlich würde da eine reichen bzw. 2 anstatt zig 1000

tabelle1 = die einstellungen
id -> int
value_id -> int
value -> ...

tabelle2 = die werte welche du auf 0 oder 1 stellen kannst
id -> int
value_name -> ...


quasi ne ini datei. das ist leichter abzufragen und performance unanfälliger.

Verfasst: 12.05.2009, 12:03
von JohnBi
danke, aber das Kind ist bereits in den Brunnen gefallen und die Daten liegen eben nun so vor ... da kann ich nicht mehr viel machen ausser das so nehmen wie es ist ...

Verfasst: 12.05.2009, 12:04
von TheRob
warum? per insert/select importieren umwandeln...

Verfasst: 12.05.2009, 12:05
von JohnBi
das sind schon über 3000 Datensätze und alle mit diesen anderen Tabellen verknüpft und da einige zahlen, darf nichts schief gehen, das Ding ist festgefahren, da geht garnichts...

Verfasst: 12.05.2009, 12:55
von DanielS
TheRob hat geschrieben:per insert/select importieren umwandeln...
JohnBi hat geschrieben:das sind schon über 3000 Datensätze...
Das hat nichts mit der Anzahl zu tun. Mach's wie TheRob schreibt und Du oder der nächste, der Dir bei der Lösung in einem Forum helfen will, hat zukünftig weniger Probleme.

Verfasst: 12.05.2009, 13:02
von TheRob
DanielS hat geschrieben: Das hat nichts mit der Anzahl zu tun. Mach's wie TheRob schreibt und Du oder der nächste, der Dir bei der Lösung in einem Forum helfen will, hat zukünftig weniger Probleme.
0X

Verfasst: 14.05.2009, 11:39
von nerd
leg dir ne neue struktur zu, importiere deine daten in die neue tabelle und dann definierst du einen view basierend auf der neuen tabelle der die alte tabellen struktur abbildet. dann schreibst du einen trigger der die inserts und updates auf die alte tabelle in die neue tabelle umlenkt. dann kannst du anfangen in ruhe deine applikation umzuschreiben.

Verfasst: 14.05.2009, 11:58
von JohnBi
Jo, alles klar, ne ich hab es nun wie oben beschrieben gelöst und der Server scheint es locker zu packen ... danke nochmals für die vielen Antworten