Teiger: mySQL/php Und noch mal SELECT & JOINS

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

  1. yo mahlzeit,

    zeig doch mal deine tabellen in einer übersichtlichen form, due du jetzt hast.

    Ilja

    1. 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

      1. 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

        1. 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?

          1. yo,

            Und nun?

            die alte abfrage nehmen und die neuen tabellen einbauen. dazu muss man aber den aufbau der neuen beziehungstabelle kennen.

            Ilja

            1. 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

              1. 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

                1. 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

    2. 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