mySQL/php Und noch mal SELECT & JOINS
Teiger
- datenbank
Guten Morgen Forum,
ich hatte vor ein paar Tagen schon einmal hinsichtlich meines Problems gepostet. Da hatte mir freundlicherweise Ilja geholfen. Danke nochmals für die Mühe.
Leider kam gegen Abend etwas dazwischen, so dass ich den http://forum.de.selfhtml.org/archiv/2004/1/70347/Thread nicht weiterführen konnte.
Ich dachte ich hätte die Outer joins so ungefähr verstanden.
Nun habe ich mich entschlossen Mitarbeiter und Kontakte nicht zusammen in eine einzige Tabelle zu packen, da sie zu viele verschiedene Attribute besitzen. Nun soll die "contacts" Tabelle in der sich auch die Mitarbeiter befinden in eine "contacts" und eine "employees" Tabelle ausgespalten werden.
Und nun sitze ich schon wieder 2 Stunden vor dem SQL Befehl und weiß nicht wie ich das richtig abändere?
Könnte mir freundlicherweise jemand helfen?
Danke
yo mahlzeit,
zeig doch mal deine tabellen in einer übersichtlichen form, due du jetzt hast.
Ilja
Hallo,
Die Tabellen wie sie nun sind:
Tabelle 1:events
-----------------------------
id|headline|txt
Tabelle 2:lnk_event_conductor
------------------------------
id_event|id_conductor
Tabelle 3: lnk_event_pic
------------------------------
id_event|id_pic
Tabelle 4: employees
-------------------------------
id|emloy_id|name|email|function|tel ..... etc
Tabelle 5: contacts
-------------------------------
id|company|name|email
Tabelle 6: pictures_events
-------------------------------
id|picture|description
Hier das SQL-Statement:
SELECT e.*, c.*, pe.picture, pe.description
FROM lnk_event_conductor AS lec, contacts AS c, events e
LEFT JOIN lnk_event_pic AS lep ON (e.id = lep.id_event)
LEFT JOIN pictures_events AS pe ON (lep.id_event = pe.id)
WHERE e.lang = '".$this->language."'
AND (e.id = 'id_nummer')
AND (e.id = lec.id_event)
AND (lec.id_event = c.id);
(hat übrigens wunderbar funktioniert, DANKE)
Nun sollen aber wie zuvor Angestellte(aus Tabelle employees) bei den Events(meistens Seminare), aber auch andere Personen (aus Tabelle contacts) auf den Events vertreten sein.
Aber wie da ein OR reinbringen?
Danke
yo
Nun sollen aber wie zuvor Angestellte(aus Tabelle employees) bei den Events(meistens Seminare), aber auch andere Personen (aus Tabelle contacts) auf den Events vertreten sein.
dann solttest du auch noch für die mitarbeiter eine weitere beziehungstabelle anlegen. die beziehungstabelle von den contacts kannst du dafür nicht verwenden.
Ilja
Hallo,
dann solttest du auch noch für die mitarbeiter eine weitere beziehungstabelle anlegen. die beziehungstabelle von den contacts kannst du dafür nicht verwenden.
OK, ist getan.
Nun existiert auch noch eine Tabelle lnk_event_contacts.
Jetzt bin ich bei 40 Tabellen für meine Webseite. ;)
Und nun?
yo,
Und nun?
die alte abfrage nehmen und die neuen tabellen einbauen. dazu muss man aber den aufbau der neuen beziehungstabelle kennen.
Ilja
Hallo,
die alte abfrage nehmen und die neuen tabellen einbauen. dazu muss man aber den aufbau der neuen beziehungstabelle kennen.
Tabelle 1: events
-----------------------------
id|headline|txt
Tabelle 2: lnk_event_contacts
------------------------------
id_event|id_contacts
Tabelle 3: lnk_event_employees
------------------------------
id_event|id_employees
Tabelle 4: lnk_event_pic
------------------------------
id_event|id_pic
Tabelle 5: employees
-------------------------------
id|emloy_id|name|email|function|tel ..... etc
Tabelle 6: contacts
-------------------------------
id|company|name|email
Tabelle 7: pictures_events
-------------------------------
id|picture|description
Hier das SQL-Statement:
SELECT e.*, c.*, pe.picture, pe.description
FROM lnk_event_conductor AS lec, contacts AS c, events e
LEFT JOIN lnk_event_pic AS lep ON (e.id = lep.id_event)
LEFT JOIN pictures_events AS pe ON (lep.id_event = pe.id)
WHERE e.lang = '".$this->language."'
AND (e.id = 'id_nummer')
AND (e.id = lec.id_event)
AND (lec.id_event = c.id);
OK, so sieht es nun aus. Aber wie weiter?
Gruß Teiger
yo,
du musst zwei abfragen miteinander verbinden. entweder du machst zwei seperate abfagen, eine für die companys und eine für die mitarbeiter oder aber falls die anzahl der spalten gleich ist, kannst du beide abfragen mit UNION verbinden.
SELECT (hier die alte abfrage)
UNION
SELECT (hier die neue im gleichen aufbau nur halt mit employees);
die erste abfrage hast du ja bereits, die zweite ist gleich nur halt andere tabellen. das solltst du schaffen. vergiss nicht, beide anbragen müssen die gleiche anzahl von spalte haben, also nichts da mit * für die spaltennamen.
Ilja
Hallo,
SELECT (hier die alte abfrage)
UNION
SELECT (hier die neue im gleichen aufbau nur halt mit employees);
Werde mein bestes geben.
Vielen Dank.
Mit freundlichem Gruß Teiger
Also,
das Problem ist unter anderem:
Woher erkenne ich aus der Tabelle:
Tabelle: lnk_event_conductor
-----------------------------
id_event | id_conductor
ob der "conductor" aus der Tabelle "contacts" oder aus der Tabelle "employees" kommt?
Teiger