AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [SQL] Verknüpfungs Problem
Thema durchsuchen
Ansicht
Themen-Optionen

[SQL] Verknüpfungs Problem

Ein Thema von MarcusB · begonnen am 17. Feb 2005 · letzter Beitrag vom 18. Feb 2005
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#11

Re: [SQL] Verknüpfungs Problem

  Alt 17. Feb 2005, 13:21
Und auf die 3 Tabellen:

SQL-Code:
SELECT * FROM devices d, actions a, deviceactions da
WHERE d.deviceid=da.deviceid
AND a.actionid=da.actionid
AND (a.action='bohrenOR a.action='schrauben')
Die Tabellen habe ich mal nicht mit Tabelle1-3 bezeichnet, da so die Verknüpfungen leichter ersichtlich werden.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von lume96
lume96

Registriert seit: 14. Sep 2003
Ort: Rognac/Marseille - Frankreich
128 Beiträge
 
Delphi 7 Professional
 
#12

Re: [SQL] Verknüpfungs Problem

  Alt 17. Feb 2005, 14:35
Zitat von alcaeus:
Und auf die 3 Tabellen:

SQL-Code:
SELECT * FROM devices d, actions a, deviceactions da
WHERE d.deviceid=da.deviceid
AND a.actionid=da.actionid
AND (a.action='bohrenOR a.action='schrauben')
Die Tabellen habe ich mal nicht mit Tabelle1-3 bezeichnet, da so die Verknüpfungen leichter ersichtlich werden.

Greetz
alcaeus
Das Problem ist aber, dass er ja nur das/die Produkt(e) haben will, auf das/die beide Aktionen zutreffen.

Ich wüsste jetzt nicht wie er, jedenfalls bei MySQL, ohne mehrfaches Einbinden der Tabelle "EINSATZGEBIETE" auskommt.

Tschüss,
Lutz
Lutz Meyer
  Mit Zitat antworten Zitat
MarcusB

Registriert seit: 7. Mär 2004
121 Beiträge
 
Delphi 7 Professional
 
#13

Re: [SQL] Verknüpfungs Problem

  Alt 17. Feb 2005, 21:47
Vielen Dank erstmal für Eure Beiträge.

Vielleicht gibt es ja auch einen ganz anderen Ansatz für die Problemstellung.
In Worten formuliert:

Es gibt eine variable Menge von Geräten und eine variable Menge von Eigenschaften.
Die Eigenschaften "hart" einzucoden macht keinen Sinn, da mit einem neuen Gerät auch neue Eigenschaften auftauchen können (um beim Beispiel zu bleiben: neues Gerät -> Hobel, neue Eigenschaft -> hobeln).

In der Suchmaske soll über die Eigenschaften die passenden Geräte selektiert werden.
(z.B. ich suche ein Gerät, welches sägen UND fräsen UND hobeln kann - also NICHT: sägen ODER fräsen ODER hobeln).

Ich finde einfach keinen Ansatz

[edit]@lume96: Nach Deinem Vorschlag müsste ich also bei 4 selektierten Eigenschaften die selbe Tabelle 4x einbinden?[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von lume96
lume96

Registriert seit: 14. Sep 2003
Ort: Rognac/Marseille - Frankreich
128 Beiträge
 
Delphi 7 Professional
 
#14

Re: [SQL] Verknüpfungs Problem

  Alt 18. Feb 2005, 09:30
Moin,

Zitat von MarcusB:
Vielleicht gibt es ja auch einen ganz anderen Ansatz für die Problemstellung.
In Worten formuliert:

Es gibt eine variable Menge von Geräten und eine variable Menge von Eigenschaften.
Die Eigenschaften "hart" einzucoden macht keinen Sinn, da mit einem neuen Gerät auch neue Eigenschaften auftauchen können (um beim Beispiel zu bleiben: neues Gerät -> Hobel, neue Eigenschaft -> hobeln).

In der Suchmaske soll über die Eigenschaften die passenden Geräte selektiert werden.
(z.B. ich suche ein Gerät, welches sägen UND fräsen UND hobeln kann - also NICHT: sägen ODER fräsen ODER hobeln).
So hatte ich es schon verstanden.

Zitat von MarcusB:
Ich finde einfach keinen Ansatz
Mein Vorschlag gefällt Dir also nicht ?

Zitat von MarcusB:
[edit]@lume96: Nach Deinem Vorschlag müsste ich also bei 4 selektierten Eigenschaften die selbe Tabelle 4x einbinden?[/edit]
ich glaube nicht, dass es eine einfachere Lösung für Dein Problem gibt.

Wenn Du die Tabelle mit den Einsatzgebieten nur einmal einbeziehst, dann stösst Du unweigerlich auf das Problem das Du zwei (oder mehrere) Konditionen für den gleichen Record setzt (xx='bohren' AND xx='schrauben'). Das kann in einem und dem selben record natürlich nie zu einem positiven Ergebniss führen.

Eine andere Möglichkeit wäre unter Umständen ein INTERSECT (falls MySQL das unterstützt).

In diesem Falle stellt Du eine eigene Query für jeden Einsatzbereich her und verknüpfst die einzelnen Queries mit INTERSECT. Das gibt Dir dann die Schnittmenge, also nur die Ergebnisse, die in allen Queries vorkommen. Das Ganze könnte dann so aussehen :
SQL-Code:
/* Alle Produkte die 'schlagen' */
SELECT p.name FROM tabelle1 p, tabelle2 t
WHERE p.id = t.pid
AND t.name = 'schlagen
INTERSECT /*Schnittmenge aus den beiden Queries*/
/* Alle Produkte die 'bohren' */
SELECT p.name FROM tabelle1 p, tabelle2 t
WHERE p.id = t.pid
AND t.name = 'bohren'
INTERSECT
blah blah blah ...
(Nicht geprüft)

Einfacher, bzw. kürzer wird die Query davon aber auch nicht und von der Performance her wird's auch nicht schneller (eher das Gegenteil).

Einziger Vorteil ist, dass sich die Query in Delphi vielleicht etwas leichter erstellen lässt, da die Basis ziehmlich fest ist.

Tschüss,
Lutz
Lutz Meyer
  Mit Zitat antworten Zitat
MarcusB

Registriert seit: 7. Mär 2004
121 Beiträge
 
Delphi 7 Professional
 
#15

Re: [SQL] Verknüpfungs Problem

  Alt 18. Feb 2005, 09:52
Zitat von lume96:
Zitat von MarcusB :
Ich finde einfach keinen Ansatz
Mein Vorschlag gefällt Dir also nicht ?
Nun, ich hatte gehofft, dass eine "einfachere" Möglichkeit besteht, denn irgendwie muss ich ja im Hintergrund dann sozusagen die Query "on-the-fly" generieren.

Das INTERSECT scheidet aus, da es leider noch nicht in MySQL (jedenfalls 4.x) nicht implementiert ist.

Aber vielen Dank für Deine Hinweise, jetzt muss ich halt mal in den sauren Apfel beissen
  Mit Zitat antworten Zitat
MarcusB

Registriert seit: 7. Mär 2004
121 Beiträge
 
Delphi 7 Professional
 
#16

Re: [SQL] Verknüpfungs Problem - gelöst!

  Alt 18. Feb 2005, 12:00
Juhu, ich habe doch noch eine Möglichkeit gefunden!

Für alle, die mal ein ähnliches Problem haben sollten :

Code:
Tabelle 1:
id|name     |
--+----------+
1 |Bohrer   |
2 |Hammer   |

Tabelle 2:
pid|name     |
---+----------+
1  |schlagen |
1  |schrauben |
2  |schlagen |
1  |bohren   |

SELECT pid, COUNT( pid ) AS anz
FROM Tabelle2
WHERE name
IN (
'bohren', 'schrauben'
)
GROUP BY pid
HAVING anz = 2
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz