[MySQL 4.0] Zwei Datensätze mit einem Datensatz verknüpfen?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MySQL 4.0] Zwei Datensätze mit einem Datensatz verknüpfen?

    Hi,

    ich lasse auf meiner Homepage Seminarveranstaltungen ausgeben.
    Ich habe 4 Tabellen:

    _events_times
    _events_locations
    _events_details
    _person

    Die Tabelle _events_times ist wie folgt aufgebaut:

    CREATE TABLE `_events_times` (
    `id` int(11) NOT NULL auto_increment,
    `id_details` int(11) NOT NULL default '0',
    `id_location` int(11) NOT NULL default '0',
    `active` char(1) NOT NULL default 'y',
    `id_referent` int(11) default NULL,
    `date_post` timestamp(14) NOT NULL,
    `date_s` date NOT NULL default '0000-00-00',
    `date_e` date NOT NULL default '0000-00-00',
    `time_s` time default '00:00:00',
    `time_e` time default '00:00:00',
    `lang` varchar(12) NOT NULL default '',
    `fee` tinytext,
    `id_contact_person` int(50) NOT NULL default '22',
    `note` tinytext,
    PRIMARY KEY (`id`),
    KEY `id` (`id`)
    ) TYPE=MyISAM AUTO_INCREMENT=295 ;


    Nun habe ich folgendes Problem:
    Die Tabelle _events_times hat einmal ein Attribut id_referent und ein Attribut id_contact_person. Das sind 2 verschiedene Personen (2 verschiedene Datensätze) in Tabelle _person. Ist es möglich beide mit einer Abfrage zu bekommen? Keine Ahnung wie das gehen soll, denn die müssten dann ja auch noch unterschiedliche Namen bekommen. Bräuchte da Hilfe.

  • #2
    2x nen LEFT JOIN auf _person (1x referent_id=perso_id + 1x contact_id=perso_id) geht nicht?
    Kissolino.com

    Kommentar


    • #3
      Ja, die Idee hatte ich auch schon, aber wie soll das gehen?
      Wie unterscheide ich dann bsw. zwischen der Email Addy des Referenten und der der Kontakt Person? Die beiden sind ja in der gleichen Tabelle und haben die Spalten haben die gleichen Attributnamen. "AS" kann ich da doch nicht verwenden...

      Kommentar


      • #4
        Original geschrieben von compuboy1010
        "AS" kann ich da doch nicht verwenden...
        wieso nicht? du kannst jeder explizit angesprochenen spalte einen alias verpassen. halt nur blöd, wenn man faul ist und alles per * selektiert
        Kissolino.com

        Kommentar


        • #5
          Nein faul nicht, aber es geht trotzdem nicht:

          PHP-Code:
          $res mysql_query("
              SELECT
                  c.id, c.date_e, c.date_s, c.time_s, c.time_e, c.note AS note_times,
                  b.at, b.street, b.building, b.zip, b.city, b.country, 
                  a.headline, a.summary, a.target, a.fee, a.info, a.anmeldung, a.infolink, 
                  a.note AS note_details, d.name_f, d.name_l, d.email
              FROM
                  _events_details a, _events_locations b, _events_times c, _person d
              LEFT JOIN _person
                  ON c.id_referent = d.id
              LEFT JOIN _person
                  ON c.id_contact_person = d.id
              WHERE
                  c.lang = '"
          .$language."'
              AND
                  c.date_s BETWEEN CURDATE() AND ADDDATE(CURDATE(), INTERVAL 200 DAY)
              AND 
                  c.id_details = a.id_details
              AND
                  c.id_location = b.id_location 
              AND
                  c.active = 'y'
              ORDER BY 
                  c.date_s ASC"
          ); 
          Zuletzt geändert von compuboy1010; 12.12.2006, 12:12.

          Kommentar


          • #6
            Original geschrieben von compuboy1010
            Nein faul nicht, aber es geht trotzdem nicht:

            PHP-Code:
                SELECT
                    
            ....
                
            FROM
                    _events_times c
                LEFT JOIN _person p1 
                    ON c
            .id_referent p1.id
                LEFT JOIN _person p2
                    ON c
            .id_contact_person p2.id
                LEFT JOIN _events_details a
                    ON 
            ...
                
            LEFT JOIN _events_locations b 
                    ON 
            ...
                
            WHERE
                    
            ... 
            mir würde das so besser gefallen (ob LEFT, RIGHT, INNER JOIN musst du selber sehen).
            Kissolino.com

            Kommentar


            • #7
              Ahhh, interessant....!



              OK, ich habe mich mal versucht:

              PHP-Code:
              $res mysql_query("
                  SELECT
                      c.id, c.date_e, c.date_s, c.time_s, c.time_e, c.note AS note_times,
                      b.at, b.street, b.building, b.zip, b.city, b.country, 
                      a.headline, a.summary, a.target, a.fee, a.info, a.anmeldung, a.infolink, 
                      a.note AS note_details, p1.name_f, p1.name_l, p1.email, p2.name_f, p2.name_l, p2.email
                  FROM
                      _events_times c
                  LEFT JOIN _person p1 
                      ON c.id_referent = p1.id
                  LEFT JOIN _person p2
                      ON c.id_contact_person = p2.id
                  LEFT JOIN _events_details a
                      ON c.id_details = a.id_details
                  LEFT JOIN _events_locations b 
                      ON c.id_location = b.id_location
                  WHERE        
                      c.lang = '"
              .$language."'         
                  AND
                      c.date_s BETWEEN CURDATE() AND ADDDATE(CURDATE(), INTERVAL 200 DAY)
                  ORDER BY 
                      c.date_s ASC"
              ); 
              Nun stellt sich mir die Frage, wenn es so funzen sollte - muss gleich nochmal drüberschauen - wie ich das denn in PHP ausgeben könnte!

              Wie würde ich nun email aus p1 und email aus p2 ausgeben?
              Ist mir schleierhaft!

              Kommentar


              • #8
                Original geschrieben von compuboy1010
                Wie würde ich nun email aus p1 und email aus p2 ausgeben?
                Ist mir schleierhaft!
                ALIAS vergeben! und die query mal von hand im phpmyadmin testen. print_r() kann auch hilfreich sein. kann doch nicht so schwer sein, oder?
                Kissolino.com

                Kommentar


                • #9
                  kann doch nicht so schwer sein, oder?
                  Das ist relativ, wenn man sich nicht jeden Tag mit SQL beschäftigt dann schon!

                  Das Problem ist, dass ich nicht weiß an welcher Stelle ich die Aliase vergeben soll.
                  Zuletzt geändert von compuboy1010; 12.12.2006, 12:46.

                  Kommentar


                  • #10
                    Original geschrieben von compuboy1010
                    Das Problem ist, dass ich nicht weiß an welcher Stelle ich die Aliase vergeben soll.
                    schwere geburt mit dir. alle doppelt benamten spalten werfen einen mysql_error. wenn du also 2x "email" holst, bringst du mysql durcheinander, also für min. 1 von beiden einen alias verwenden.
                    Kissolino.com

                    Kommentar


                    • #11
                      Super!!!

                      Es klappt nun. Du warst eine sehr große Hilfe!!

                      Vielen Dank!!
                      Zuletzt geändert von compuboy1010; 12.12.2006, 13:53.

                      Kommentar

                      Lädt...
                      X