SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Webseiten professionell erstellen

Webseiten professionell erstellen zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 20.01.2007, 00: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
  #2  
Alt 20.01.2007, 11:27:05
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: tabelle mehrfach abrufen

Mit zwei INNER JOINs solltest du problemlos alle Firmen ermitteln können, die zwei beliebigen Projekten zugeordnet sind:
Code:
SELECT
    f.Firmenname
FROM
    FIRMA AS f
INNER JOIN
    FIRMA_PROJEKT AS fp1
ON
    f.FNr = fp1.ProjektNr
INNER JOIN
    FIRMA_PROJEKT AS FP2
ON
    f.Nr = fp2.ProjektNr
WHERE
    fp1.ProjektNr = 7 AND
    fp2.ProjektNr = 29
Mit Zitat antworten
  #3  
Alt 20.01.2007, 17:29:14
weko32^1 weko32^1 ist offline
Anfänger
 
Registriert seit: Jan 2007
Beiträge: 3
AW: tabelle mehrfach abrufen

Hallo xabbuh,

erst mal vielen Dank für Deine Mühen !

Ich habe Dein Statement etwas modifiziert, es hat wunderbar funktioniert!


SELECT f.Firmenname, f.KdNr, a.Ort
FROM FIRMA AS f, ADRESSE AS a
INNER JOIN FIRMA_PROJEKT AS fp1 ON f.FNr = fp1.FNr
INNER JOIN FIRMA_PROJEKT AS fp2 ON f.FNr = fp2.FNr
INNER JOIN FIRMA_PROJEKT AS fp3 ON f.FNr = fp3.FNr
INNER JOIN FIRMA_PROJEKT AS fp4 ON f.FNr = fp4.FNr
WHERE a.Ort LIKE 'berlin'
AND f.Adresse = a.AdrIndex
AND fp1.ProjektNr =7
AND fp2.ProjektNr =29
AND fp3.ProjektNr =90
AND fp4.ProjektNr =38


Allerdings wird das Ding bereits bei drei Bezügen sehr langsam, bei vier bekomme ich einen Timeout vom Browser. Eigentlich hätte ich aber fünf Bezüge.

Kann man das anders lösen, oder irgendwie performanter machen.

Vielen Dank schon mal !
Mit Zitat antworten
  #4  
Alt 20.01.2007, 21:35:53
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: tabelle mehrfach abrufen

Hast du Indexe auf die Spalten gelegt?
Mit Zitat antworten
  #5  
Alt 21.01.2007, 14:33:28
weko32^1 weko32^1 ist offline
Anfänger
 
Registriert seit: Jan 2007
Beiträge: 3
AW: tabelle mehrfach abrufen

Hallo xabbuh,

in der Tat habe ichdas bis dato nicht gemacht. Muss ich auf alle betroffenen Tabellenspalten Indexe legen oder nur auf spezielle.
Mit Zitat antworten
  #6  
Alt 21.01.2007, 15:14:02
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: tabelle mehrfach abrufen

Erst einmal sollten Indexe auf den Spalten verwendet werden, die eine Verknüpfung zu anderen Tabellen realisieren.
Mit Zitat antworten
Antwort


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

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

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Datensatz in Tabelle einlesen nate10er PHP Grundlagen 0 07.04.2006 16:29:24
Problem dynamische Tabelle aber wie? Pixelschubser PHP für Fortgeschrittene und Experten 1 08.10.2005 19:16:24
auto_increment zuückgeben oder Tabelle sperren -TC- MySQLi/PDO/(MySQL) 2 17.08.2004 14:55:54
Tabelle gibt länge der Liste vor Soeren PHP Grundlagen 30 09.07.2004 20:30:04
MySQL - tabelle in tabelle Gweilo PHP für Fortgeschrittene und Experten 4 09.11.2002 19:41:57


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:22:35 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt