Einzelnen Beitrag anzeigen
  #1  
Alt 19.01.2007, 23:20:11
weko32^1 weko32^1 ist offline
Anfänger
 
Registriert seit: Jan 2007
Beiträge: 3
tabelle mehrfach abrufen

Hallo,

ich komme mit folgendem Problem trotz intensiver Suche im Forum sowie GOOGLE nicht weiter.

Betroffen sind drei Tabellen (FIRMA, FIRMA_PROJEKT, PROJEKT)

Die Tabelle FIRMA enthält die Firmenstammdaten, die Tabelle PROJEKT die Projektstammdaten, die Tabelle FIRMA_PROJEKT stellt die Verbindung her,
d.h. in der Tabelle FIRMA_PROJEKT gibt es zwei Spalten, wobei die erste die FirmenID und die zweite die Projektnummer beinhaltet. Die Spalte Projektstatus ist in diesem Zusammenhang nicht relevant.

Durch dieses Konstrukt ist es möglich, beliebig vielen Firmen beliebig viele Projekte zuzuordnen.

Ich möchte nun gezielt nach Firmen suchen, welche mehrere Projekte
zugeordnet haben, was ich mit untenstehendem Statement erfolglos versucht habe zu realisieren.
Die Suche nach einem Projekt funktioniert einwandfrei, bei der Kombination zweier oder mehrerer erhält man immer eine leere Menge als Ergebnis.

Vielen Dank für euere Hilfe !




$OrderFeld = "FIRMA.Firmenname";

if (isSet($kosmetik) && ($kosmetik == "X"))
$SelKosmetik = "and FIRMA.FNr = FIRMA_PROJEKT.FNr and FIRMA_PROJEKT.ProjektNr = 7 and FIRMA_PROJEKT.ProjektStatus > 3";

if (isSet($nail) && ($nail == "X"))
$SelNail = "and FIRMA.FNr = FIRMA_PROJEKT.FNr and FIRMA_PROJEKT.ProjektNr = 29 and FIRMA_PROJEKT.ProjektStatus > 3";

if (isSet($feet) && ($feet == "X"))
$SelFeet = "and FIRMA.FNr = FIRMA_PROJEKT.FNr and FIRMA_PROJEKT.ProjektNr = 90 and FIRMA_PROJEKT.ProjektStatus > 3";

if (isSet($hair) && ($hair == "X"))
$SelHair = "and FIRMA.FNr = FIRMA_PROJEKT.FNr and FIRMA_PROJEKT.ProjektNr = 38 and FIRMA_PROJEKT.ProjektStatus > 3";

if (isSet($accessoires) && ($accessoires == "X"))
$SelAccessoires = "and FIRMA.FNr = FIRMA_PROJEKT.FNr and FIRMA_PROJEKT.ProjektNr = 217 and FIRMA_PROJEKT.ProjektStatus > 3";



$abfrage = sprintf ("%s %s %s %s %s %s %s %s %s %s",
"select FIRMA.FNr, FIRMA.KdNr, FIRMA.Firmenname, FIRMA.Zusatz, FIRMA.Url, ADRESSE.Strasse,",
" ADRESSE.PLZ, ADRESSE.Ort",

"from FIRMA, ADRESSE, FIRMA_PROJEKT",

"where ( ADRESSE.Ort LIKE '%$Ort%' OR ADRESSE.Plz LIKE '$Ort%' ) and FIRMA.Adresse = ADRESSE.AdrIndex",
$SelKosmetik,
$SelNail,
$SelHair,
$SelFeet,
$SelAccessoires,

"order by $OrderFeld");

$res = mysql_query($abfrage);
$num=mysql_num_rows($res);








Anbei - als Zusatzinfo - die Tabellenstrukturen. Selbige sind hier aus Platzgründen auf die nötigen Spalten reduziert.

Das Konstrukt mit der Zwischentabelle gibt mir - wie bereits erwähnt die Möglichkeit n:m Beziehungen abzubilden.

Möchte ich nun wissen, welche Firmen ein Kosmetikstudio ( ProjektNr 7 ) betreiben, funktioniert mein Statement ganz gut und ich erhalte - mit unten genannten beispielhaften Tabellen - als Ergebnis die Firmennummern 1001 - 1005 ( also alle ).

Ein Kosmetik- UND ein Nagelstudio ( ProjektNr 29 ) betreiben die Firmen 1001, 1002,1005.

Dieses Ergebnis - sowie die Ergebnisse der anderen Kombinationen - erhalte ich mit meinem Statement nicht.

Meine Frage ist nun, wie könnte in diesem Falle das konkrete Statement aussehen?

Nochmals vielen Dank im Voraus !






Tabelle FIRMA

FNr Firmenname
------------------------------------
1001 Hans Huber
1002 Martin Müller
1003 Lisa Zacherl
1004 Sabrina Feist
1005 Renate Bimmler




Tabelle PROJEKT

ProjektNr ProjektName
-----------------------------------
7 Kosmetikstudio
29 Nagelstudio
90 Fusspflegestudio
38 Haarstudio
217 Accessoires




Tabelle FIRMA_PROJEKT

FNr ProjektNr
-----------------------------------
1001 7
1001 29
1001 38
1002 7
1002 29
1003 7
1004 7
1004 90
1004 38
1004 217
1005 7
1005 29
1005 217
Mit Zitat antworten