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 ::

PHP 5.3 & MySQL 5.1

PHP 5.3 & MySQL 5.1 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 27.02.2015, 22:36:01
basementmedia basementmedia ist offline
Anfänger
 
Registriert seit: Feb 2015
Alter: 44
Beiträge: 11
Inner join zweimal mit der gleichen Tabelle

Hallo zusammen,

ich bin neu hier im Forum also erstmal "Hallo" an alle ;-)

Ich bin zwar kein Mysql-Newie mehr aber komm bei der folgenden Sache einfach ned weiter und hoffe, ihr könnt mir helfen:

Ich habe 4 Tabellen:

"Mitglieder"
In dieser Tabelle sind die Daten von Mitgliedern eines Vereins erfasst.
Die Tabelle hat u.a. die Spalten "Vorname" und "Nachname"

"Leistungen"
In dieser Tabelle sind verschiedene Leistungen definiert, die von den Mitgliedern für andere Mitglieder geleistet werden können
Die Tabelle hat u.a. die Spalte "Bezeichnung"

"Mitglieder_Leistungen"
In dieser Tabelle ist erfasst, welches Mitglied welche Leistungen anbietet bzw. benötigt.
Die Tabelle hat u.a. die Spalten
"mitglied_id" (= ID des Mitglieds, das die Leistung anbietet bzw. benötigt),
"leistung_id" (= ID der Leistung),
"leistungsart_id" (=ID der Leistungsart, 1=Angebot, 2=Nachfrage)

"Leistungsliste"
Über diese Tabelle werden Anbieter und Nachfrager miteinander "verheiratet".
Die Tabelle hat u.a. die Spalten
"mitglieder_leistungen_id" (=ID der nachgefragten Leistung)
"mitglieder_id" (=ID des Mitglieds, dass sich dazu bereit erklärt hat, die Leistung durchzuführen).

Soviel zum Aufbau der Datenbank. Evtl. wäre es leichter gewesen eine Extra Tabelle für Leistungsangebote und für Leistungsnachfragen zu machen, ich habe eben alles in eine Tabelle (nämlich "Mitglieder_Leistungen") gepackt und über die Spalte "Leistungsart_id" die Art der Leistung (also Angebot oder Nachfrage) unterschieden. Sollte ja auch ok sein.

Zur eigentlichen Frage:
Nun habe ich in der Tabelle "Leistungsliste" ein paar Einträge drin stehen und möchte mir nun eine Ergebnistabellle ausgeben lassen, die wie folgt aussieht

Leistung Leistungsnehmer Leistungsgeber

Das Ergebnis der Spalte Leistung soll natürlich nicht die Spalte "Leistung_id" der Tabelle "Mitglieder_Leistungen" sein, sondern der entsprechende Wert aus der Tabelle "Leistungen". Dies lässt sich ja einfach bewerkstelligen durch "INNER JOIN leistungen ON mitglieder_leistungen.leistung_id = leistungen.ID".

Aber im Fall der Ergebnisse der Spalten Leistungsnehmer und Leistungsgeber wirds schon schwieriger und ich komm nicht weiter.
Wenn ich nur "INNER JOIN mitglieder ON leistungsliste.mitglied_id = mitglieder.ID mache, habe ich ja nur den Leistungsgeber. Den Namen des Leistungsgebers bekomme ich aber nur über den Umweg über "leistungsliste.mitglieder_leistungen_id" --> "Mitglieder_Leistungen.mitglied_id" --> mitglieder.ID

Lässt sich eine Inner Join über zwei "Unterverschachtelungen" bewerkstelligen (mir fällt grad kein besseres Wort ein, ich muss ja erst in die eine Tabellle und da dann in die andere Tabelle rein). Und selbst wenn es klappt, bräuchte ich ja zwei unterschiedliche Alias, da ja beides Mal die Tabelle "Mitglieder" referriert wird und ich in der Ergebnistabelle ja dann unterschiedliche Spalten "Leistungsgeber" und "Leistungsnehmer" brauche.

Puh, sorry für soviel Text...
Hoffe irgendjemand versteht die Aufgabestellung und kann mir weiterhelfen ;-(

Viele Grüße

Basement
Mit Zitat antworten
  #2  
Alt 27.02.2015, 23:13:21
pguser pguser ist offline
Junior Member
 
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
AW: Inner join zweimal mit der gleichen Tabelle

Zitat:
Zitat von basementmedia Beitrag anzeigen

Zur eigentlichen Frage:

Lässt sich eine Inner Join über zwei "Unterverschachtelungen" bewerkstelligen
Ja. Du hast zwei Freunde. Beide heißen JOIN. Um sie zu unterscheiden gibst Du beiden einen Alias.
Mit Zitat antworten
  #3  
Alt 28.02.2015, 09:02:39
basementmedia basementmedia ist offline
Anfänger
 
Registriert seit: Feb 2015
Alter: 44
Beiträge: 11
AW: Inner join zweimal mit der gleichen Tabelle

Hi,

dass es Inner join AS gibt wusste ich, also z.B.

INNER JOIN mitglieder AS leistungsnehmer ON (mitglieder_leistungen.mitglied_id = mitglieder.ID)
INNER JOIN mitglieder AS leistungsgeber ON (leistungsliste.mitglied_id = mitglieder.ID)

doch was schreibe ich zwischen SELECT und FROM rein, also wie kann ich diese INNER JOIN Ergebnisse ansprechen?

Hier ist/war mein Versuch:

SELECT leistungen.bezeichnung, CONCAT (mitglieder.nachname,', ',mitglieder.vorname) as leistungsnehmer, CONCAT (mitglieder.nachname,', ',mitglieder.vorname) as leistungsgeber FROM (leistungsliste, leistungen, mitglieder_leistungen, mitglieder)
INNER JOIN mitglieder_leistungen ON (leistungsliste.mitglieder_leistungen_id = mitglieder_leistungen.ID)
INNER JOIN leistungen ON (mitglieder_leistungen.leistung_id = leistungen.ID)
INNER JOIN mitglieder AS leistungsnehmer ON (mitglieder_leistungen.mitglied_id = mitglieder.ID)
INNER JOIN mitglieder AS leistungsgeber ON (leistungsliste.mitglied_id = mitglieder.ID)

Ich weiß eben nicht, wie ich definieren kann, dass der "CONCAT([...]) as leistungsgeber" aus der ersten "INNER JOIN mitglieder AS leistungsgeber[...]" und der leistungsnehmer as der anderen INNER JOIN "stammen" soll.
Mir fehlt hier die richtige Syntax weil ich so eine "komplexere" Abfrage noch nie gemacht habe.

Bin für jede Hilfe dankbar.

Viele Grüße
Basement
Mit Zitat antworten
  #4  
Alt 28.02.2015, 10:44:20
pguser pguser ist offline
Junior Member
 
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
AW: Inner join zweimal mit der gleichen Tabelle

Lies noch mal den letzten Satz von mir. Immer wieder, bis Du es hast.
Mit Zitat antworten
  #5  
Alt 28.02.2015, 11:19:09
basementmedia basementmedia ist offline
Anfänger
 
Registriert seit: Feb 2015
Alter: 44
Beiträge: 11
AW: Inner join zweimal mit der gleichen Tabelle

...du bist echt hartnäckig ;-)

Aber sorry ich komm echt nicht dahinter wie du das meinst.

Hab jetzt mal das folgende versucht:

SELECT leistungen.bezeichnung, CONCAT (leistungsnehmer.nachname,', ',leistungsnehmer.vorname) as name_leistungsnehmer, CONCAT (leistungsgeber.nachname,', ',leistungsgeber.vorname) as name_leistungsgeber FROM (leistungsliste, leistungen, mitglieder_leistungen, mitglieder)
INNER JOIN mitglieder_leistungen ON (leistungsliste.mitglieder_leistungen_id = mitglieder_leistungen.ID)
INNER JOIN leistungen ON (mitglieder_leistungen.leistung_id = leistungen.ID)
INNER JOIN mitglieder AS leistungsnehmer ON (mitglieder_leistungen.mitglied_id = mitglieder.ID)
INNER JOIN mitglieder AS leistungsgeber ON (leistungsliste.mitglied_id = mitglieder.ID)


Da bringt er mir "#1066 - Not unique table/alias: 'mitglieder_leistungen'".

Ist meine Denkweise bis auf den noch vorhandenen Fehler schon mal richtig?
Vielleicht kannst du mir ja noch nen Hinweis geben...
Vor allem kapier ich die Fehlermeldung nicht da ich doch mitglieder_leistungen denke ich korrekt geJOINed habe...

Grüßle

Basement
Mit Zitat antworten
  #6  
Alt 28.02.2015, 11:34:30
pguser pguser ist offline
Junior Member
 
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
AW: Inner join zweimal mit der gleichen Tabelle

Zitat:
Zitat von basementmedia Beitrag anzeigen
...du bist echt hartnäckig ;-)
Du auch. Und das war jetzt kein Lob.

select alias1.feld1, alias2.feld1, ... from ... left join ... as alias1 on ... left join ... as alias2 on ...
Mit Zitat antworten
  #7  
Alt 28.02.2015, 11:58:02
basementmedia basementmedia ist offline
Anfänger
 
Registriert seit: Feb 2015
Alter: 44
Beiträge: 11
AW: Inner join zweimal mit der gleichen Tabelle

Hi,

aber genau das mach ich doch oder?

Dein

"select alias1.feld1[...]"

entspricht doch meinem

"SELECT [...] CONCAT (leistungsnehmer.nachname,', ',leistungsnehmer.vorname) as name_leistungsnehmer"

und dein

"[...]left join ... as alias1 on ... [...]"

entspricht doch meinem

"[...]INNER JOIN mitglieder AS leistungsnehmer ON (mitglieder_leistungen.mitglied_id = mitglieder.ID)[...]"

Der einzige Unterschied ist das LEFT JOIN anstattt dass INNER JOIN.
Liegt hier der "Hund begraben"?

Folgendes funktioniert auch nicht:

SELECT leistungen.bezeichnung, CONCAT (leistungsnehmer.nachname,', ',leistungsnehmer.vorname) as name_leistungsnehmer, CONCAT (leistungsgeber.nachname,', ',leistungsgeber.vorname) as name_leistungsgeber FROM (leistungsliste, leistungen, mitglieder_leistungen, mitglieder)
INNER JOIN mitglieder_leistungen ON (leistungsliste.mitglieder_leistungen_id = mitglieder_leistungen.ID)
INNER JOIN leistungen ON (mitglieder_leistungen.leistung_id = leistungen.ID)
LEFT JOIN mitglieder AS leistungsnehmer ON (mitglieder_leistungen.mitglied_id = mitglieder.ID)
LEFT JOIN mitglieder AS leistungsgeber ON (leistungsliste.mitglied_id = mitglieder.ID)

Viele Grüße

Basement
Mit Zitat antworten
  #8  
Alt 28.02.2015, 12:14:15
pguser pguser ist offline
Junior Member
 
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
AW: Inner join zweimal mit der gleichen Tabelle

Zitat:
Zitat von basementmedia Beitrag anzeigen
Hi,

aber genau das mach ich doch oder?

Ah ja. Egal. Deine From-Liste und dann noch mal die JOINS. Nicht immer ist doppelt besser.
Mit Zitat antworten
  #9  
Alt 28.02.2015, 13:25:52
basementmedia basementmedia ist offline
Anfänger
 
Registriert seit: Feb 2015
Alter: 44
Beiträge: 11
AW: Inner join zweimal mit der gleichen Tabelle

Mist, sitz grad voll auf der Leitung.
Egal, kann man nichts machen. Evtl. komm ich noch drauf.

Trotzdem danke für deine Hilfe.

Grüßle
Basement
Mit Zitat antworten
  #10  
Alt 28.02.2015, 13:31:38
pguser pguser ist offline
Junior Member
 
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
AW: Inner join zweimal mit der gleichen Tabelle

Das hier ist einfach nur Bullshit: FROM (leistungsliste, leistungen, mitglieder_leistungen, mitglieder)
Mit Zitat antworten
Antwort

Stichworte
inner join


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
Bestimmtes Ergebnis aus der 2. Tabelle einer INNER JOIN abfrage yaem MySQLi/PDO/(MySQL) 4 20.12.2013 02:51:50
Mit JOIN eine Tabelle zweimal abfragen madmix MySQLi/PDO/(MySQL) 15 28.10.2010 06:29:50
(inner join) Bezug einer Tabelle auf sich selbst braindead2000 MySQLi/PDO/(MySQL) 2 13.12.2007 15:08:53
2 Tabellen 2 Spalten INNER JOIN Sadok MySQLi/PDO/(MySQL) 2 14.06.2007 17:16:24
Performance bei Abfrage inner join Tikiwiki MySQLi/PDO/(MySQL) 7 21.02.2006 09:46:50


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:16:36 Uhr.


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


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