![]() |
Datenbank: MySQL • Version: 4.0.22 • Zugriff über: n/a
[SQL] Verknüpfungs Problem
Hallo,
ich häng mal wieder :gruebel: Ich habe 2 Tabellen, in der einen sind Produkte gespeichert in der anderen deren Einsatzgebiete etwa so (stark vereinfacht):
Code:
Zusätzlich habe ich eine Suchmaske in der man die Einsatzgebiete anhaken kann.
Tabelle 1:
id|name | --+----------+ 1 |Bohrer | 2 |Hammer | Tabelle 2: pid|name | ---+----------+ 1 |schlagen | 1 |schrauben | 2 |schlagen | 1 |bohren | (pid=pi) Wie muss meine SQL-Abfrage aussehen, damit ich z.B. herausfinde welches Gerät schlagen und bohren kann? Ich hoffe ihr versteht was ich meine :wall: |
Re: [SQL] Verknüpfungs Problem
SQL-Code:
Meinst du so?
SELECT tabelle1.name FROM tabelle1, tabelle2 WHERE tabelle1.id = tabelle2.pid AND tabelle2.name = 'schlagen'
|
Re: [SQL] Verknüpfungs Problem
Ja, im Prinzip schon, aber das Problem entsteht, wenn ich nach 'schlagen' UND 'bohren' suchen will.
Wenn ich nämlich einfach noch eine AND Klausel dranhänge wirds ja immer falsch :( |
Re: [SQL] Verknüpfungs Problem
dann muss es eben
SQL-Code:
heißen. nur hätte das ja keinen sinn weil nie beides vorkommen kann. also musstest du einfach mal or anstelle des letzten "AND" nehmen
SELECT tabelle1.name FROM tabelle1, tabelle2 WHERE tabelle1.id = tabelle2.pid AND tabelle2.name = 'schlagen' AND tabell2.name = 'bohren'
SQL-Code:
SELECT tabelle1.name FROM tabelle1, tabelle2 WHERE tabelle1.id = tabelle2.pid AND (tabelle2.name = 'schlagen' OR tabell2.name = 'bohren')
|
Re: [SQL] Verknüpfungs Problem
Zitat:
Tabelle 1 mit Geräten, Tabelle 2 mit Aktionen, Tabelle 3 stellt eine N:M Verknüpfung zwischen Tabelle 1 & 2 her.
Code:
Tabelle 1:
idDevice|name | --------+----------+ 1 |Bohrer | 2 |Hammer | Tabelle 2: idAction|name | --------+----------+ 1 |schlagen | 2 |schrauben | 3 |bohren | Tabelle 3: idDevice|idAction | --------+----------+ 1 |3 | 2 |1 | |
Re: [SQL] Verknüpfungs Problem
@shmia ich finde deine Lösung eindeutig sauberer und schöner, aber ich glaube nicht, dass das in diesem Fall zwingend notwendig ist. Mir fällt kein Fall ein, bei dem die aktuelle Lösung versagen würde.
|
Re: [SQL] Verknüpfungs Problem
Ich hab mir schon gedacht, dass das kompliziert wird.
Das mit dem OR funktiniert leider nicht, da ich nur Geräte will, die BEIDES können. Danke auch für den Tipp mit der 3. Tabelle, aber da kriege ich Probleme, da da schon ein Haufen Skripte drumherum sind, die dann alle geändert werden müssten :( Aber wenns keine andere Möglichkeit gibt, werde ichs wohl so machen müssen. |
Re: [SQL] Verknüpfungs Problem
Zitat:
Ein Tippfehler bzw. Gross-Kleinschreibung und schon gibt's Probleme, den dann steht für Hammer vielleicht schlagen und für Bohrer Schlagen. Ausserdem schreibt Marcus, dass er eine Suchmaske hat, in der man das Einsatzgebiet wählen muss. Wie will er die Maske den automatisch füllen, ohne doppelte Einträge zu bekommen (ich weiss SELECT DISTINCT, ist aber nicht sauber). Ich würde auf jeden Fall zu drei Tabellen raten, so wie shmia rät. Tschüss, Lutz |
Re: [SQL] Verknüpfungs Problem
@lume96: Das ist ja stark vereinfacht dargestellt, die Werte wie "schlagen" und "bohren" etc. kommen ja aus einer dritten Tabelle,
aber jetzt habe ich ein Verständnisproblem. Wenn ich wie vorgeschlagen 3 Tabellen mache habe ich doch das gleiche Problem, oder?
Code:
Ich komm nicht auf das Statement, dass mir Geräte mit "bohrt" UND "schraubt" liefert :wall:
Tabelle 1:
idDevice|name | --------+----------+ 1 |Bohrer | 2 |Hammer | Tabelle 2: idAction|name | --------+----------+ 1 |schlagen | 2 |schrauben | 3 |bohren | Tabelle 3: idDevice|idAction | --------+----------+ 1 |3 | <-- (Bohrer bohrt) 2 |1 | 1 |2 | <-- (Bohrer schraubt) Das ganze wird ja noch ein bischen komplizierter, weil in dem Suchformular beliebig viele Einsatzgebiete angehakt werden können. :gruebel: |
Re: [SQL] Verknüpfungs Problem
Moin,
bezogen auf die beiden Tabellen in Deinem ersten Eintrag würde das ungefähr so aussehen :
SQL-Code:
Hab's jetzt nicht geprüft, aber sollte in etwa so laufen. Ich glaube nicht, dass Du bei MySQL andere Lösungen hast.
SELECT p.name FROM tabelle1 p, tabelle2 t1, tabelle2 t2
WHERE p.id = t1.pid AND p.id = t2.pid AND t1.name = 'schlagen' AND t2.name = 'bohren' Tschüss, Lutz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz