Anzeige:
Ergebnis 1 bis 11 von 11

Thema: [MySQL] Probleme mit JOIN

  1. #1
    Registrierter Benutzer Avatar von ClausVB
    Registriert seit
    05.08.2005
    Ort
    NRW - Deutschland
    Beiträge
    106

    Question [MySQL] Probleme mit JOIN

    Hallo!

    Ziel ist es nicht die ID des Quell- und Zielservers auszugeben, sondern die IP-Adressen.

    Folgende Abfrage bekomme ich hin:

    Code:
    mysql> SELECT einzelauftraege.id, einzelauftraege.name, zielserver_id, ftp_server.adresse, quellserver_id, ftp_server.adresse, einzelauftraege.datum_zeit
    FROM einzelauftraege 
    LEFT JOIN ftp_server ON zielserver_id = ftp_server.id;
    +----+-------------------+---------------+-----------------+----------------+-----------------+---------------------+
    | id | name              | zielserver_id | adresse         | quellserver_id | adresse         | datum_zeit          |
    +----+-------------------+---------------+-----------------+----------------+-----------------+---------------------+
    |  1 | CVB_test00        |             9 | 10.101.0.7      |             10 |  10.101.0.7     | 2006-03-21 10:00:00 |
    |  2 | Name des Auftrags |             1 | 10.101.193.129  |              5 |  10.101.193.129 | 2006-03-23 08:02:59 |
    +----+-------------------+---------------+-----------------+----------------+-----------------+---------------------+
    2 rows in set (0.00 sec)
    Die Tabelle "ftp_server sieht so aus.

    Code:
    mysql> SELECT id, adresse, quelle_ziel FROM ftp_server;
    +----+-----------------+-------------+
    | id | adresse         | quelle_ziel |
    +----+-----------------+-------------+
    |  1 |  10.101.193.129 | z           |
    |  5 |  10.101.160.57  | q           |
    |  8 |  10.101.163.79  | q           |
    |  9 |  10.101.0.7     | z           |
    | 10 |  10.101.193.129 | q           |
    +----+-----------------+-------------+
    5 rows in set (0.00 sec)
    Kann natürlich sein, dass es mit den Strukturen und JOIN nicht geht. Ich habe schon mal daran gedacht IF-Strukturen (geht mit MySQL ja) in der WHERE Bedinung zu verwenden, aber vielleicht geht es ja auch über JOIN?

    Gruß und Danke,
    Claus

  2. #2
    Registrierter Benutzer Avatar von yankee42
    Registriert seit
    15.04.2005
    Beiträge
    41
    Du hast doch da ein scheinbar funktionierendes JOIN. Wo ist denn das Problem? WIe soll das Ergebinis denn aussehen?

  3. #3
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von ClausVB
    Hallo!
    Kann natürlich sein, dass es mit den Strukturen und JOIN nicht geht. Ich habe schon mal daran gedacht IF-Strukturen (geht mit MySQL ja) in der WHERE Bedinung zu verwenden, aber vielleicht geht es ja auch über JOIN?

    Gruß und Danke,
    Claus
    SELECT einzelauftraege.id, einzelauftraege.name, zielserver_id, ftp_server.adresse, quellserver_id, ftp_server.adresse, einzelauftraege.datum_zeit
    FROM einzelauftraege
    LEFT JOIN ftp_server ON zielserver_id = ftp_server.id;

    Du solltest überall die Punkt Syntax verwenden, + die Tabellen die
    du abfragst müssen natürlich in der FROM Klausel auch vorkommen.

    Danach...
    Wenn Du Zeit hast, verschiedene mal Join Varianten ausprobieren
    und die Geschwingkeit optimieren.
    Geändert von Romanday (24-03-2006 um 12:18 Uhr)
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  4. #4
    Registrierter Benutzer Avatar von ClausVB
    Registriert seit
    05.08.2005
    Ort
    NRW - Deutschland
    Beiträge
    106
    Zitat Zitat von yankee42
    Du hast doch da ein scheinbar funktionierendes JOIN. Wo ist denn das Problem? WIe soll das Ergebinis denn aussehen?
    So soll das Ergebnis aussehen. Der JOIN liefert im Moment nur die Ziel-Adresse richtig zurück, jedoch nicht die Quelladresse.
    Code:
    +----+-------------------+-----------------+-----------------+---------------------+
    | id | name              | ziel_adresse    | quell_adresse   | datum_zeit          |
    +----+-------------------+-----------------+-----------------+---------------------+
    |  1 | CVB_test00        | 10.101.0.7      | 10.101.193.129  | 2006-03-21 10:00:00 |
    |  2 | Name des Auftrags | 129.101.193.129 | 10.101.163.79   | 2006-03-23 08:02:59 |
    +----+-------------------+-----------------+-----------------+---------------------+
    Man kann die ID's und die dazugehörigen Werte ja in den beiden Tabellen oben ablesen und sehen, dass mein JOIN ein falsches Ergebnis zurückliefert.

    Wie baue ich den JOIN für beide Adressen richtig auf?

    Gruß
    Claus

  5. #5
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    03.10.2001
    Ort
    potsdam
    Beiträge
    881
    du musst einfach die tabelle ftp_server zweimal mit den aufträgen joinen, etwa so

    Code:
    select a.*,fq.ip_address,fz.ip_axddress from auftrag a, ftp fq, ftp fz where a.quellid=fz.id and a.zielid=fz.id
    ps: wird so nicht funktionieren, da ich mir auf die schnelle nicht die mühe gemacht habe, deine tab-name abzutippen. es geht ums prinzip...
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  6. #6
    Registrierter Benutzer Avatar von ClausVB
    Registriert seit
    05.08.2005
    Ort
    NRW - Deutschland
    Beiträge
    106
    Zitat Zitat von elrond
    ps: wird so nicht funktionieren, da ich mir auf die schnelle nicht die mühe gemacht habe, deine tab-name abzutippen. es geht ums prinzip...
    Danke Elrond, aber funktioniert auch nicht. Ich habe das mal umgestrickt:
    Code:
    mysql> SELECT e.id, e.name, e.zielserver_id, f.adresse AS ziel_server, e.quellserver_id, e.datum_zeit
    FROM einzelauftraege AS e, ftp_server AS f
    WHERE e.quellserver_id = f.id AND e.zielserver_id = f.id;
    Empty set (0.03 sec)
    mit OR bringt es schon mehr aber auch nicht das gewünschte Ergebnis.

    Code:
    mysql> SELECT e.id, e.name, e.zielserver_id, f.adresse AS ziel_server, e.quellserver_id, e.datum_zeit
    FROM einzelauftraege AS e, ftp_server AS f
    WHERE e.quellserver_id = f.id OR e.zielserver_id = f.id;
    +----+-------------------+---------------+-----------------+----------------+---------------------+
    | id | name              | zielserver_id | ziel_server     | quellserver_id | datum_zeit          |
    +----+-------------------+---------------+-----------------+----------------+---------------------+
    |  2 | Name des Auftrags |             1 |  10.101.193.129 |              5 | 2006-03-23 08:02:59 |
    |  2 | Name des Auftrags |             1 |  10.101.160.57  |              5 | 2006-03-23 08:02:59 |
    |  1 | CVB_test00        |             8 |  10.101.163.79  |             10 | 2006-03-21 10:00:00 |
    |  1 | CVB_test00        |             8 |  10.101.193.129 |             10 | 2006-03-21 10:00:00 |
    +----+-------------------+---------------+-----------------+----------------+---------------------+
    4 rows in set (0.00 sec)
    Wenigstens stehen die richtigen IP-Adressen jetzt untereinander ... es wäre aber schön, wenn sie in einer Zeile (siehe Beispiel oben) stehen würden.

    Sonst noch Ideen? Vielleicht ein UNIION oder so?

    Gruß
    Claus
    Geändert von ClausVB (27-03-2006 um 12:58 Uhr)

  7. #7
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    03.10.2001
    Ort
    potsdam
    Beiträge
    881
    Du willst neben dem Auftrag die ip des Quellservers und die des Zielservers sehen, richtig?
    Wenn ja, war mein vorhergehendes Post doch nicht ausreichend erleuchtend...

    versuch das hier:
    Code:
    SELECT e.id, e.name, e.zielserver_id, z.adresse AS ziel_server,q.adresse AS quell_server, e.quellserver_id, e.datum_zeit
    FROM einzelauftraege AS e, ftp_server AS q, ftp_server AS z
    WHERE e.quellserver_id = q.id 
    and e.zielserver_id = z.id;
    Die idee ist weiterhin die Tabell ftp_server _ZWEIMAL_ in der Abfrage zu benutzen
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  8. #8
    Registrierter Benutzer Avatar von ClausVB
    Registriert seit
    05.08.2005
    Ort
    NRW - Deutschland
    Beiträge
    106
    Zitat Zitat von elrond
    Du willst neben dem Auftrag die ip des Quellservers und die des Zielservers sehen, richtig?
    Wenn ja, war mein vorhergehendes Post doch nicht ausreichend erleuchtend...
    Nein, der Fehler liegt auf meiner Seite, ich hätte mir die Abkürzungen vergegenwärtigen sollen.

    So funktioniert es:
    Code:
    mysql> SELECT e.id, e.name, z.adresse AS ziel_server, q.adresse AS quell_server, e.datum_zeit
    FROM einzelauftraege AS e, ftp_server AS q, ftp_server AS z
    WHERE e.quellserver_id = q.id
    AND e.zielserver_id = z.id;
    +----+-------------------+-----------------+-----------------+---------------------+
    | id | name              | ziel_server     | quell_server    | datum_zeit          |
    +----+-------------------+-----------------+-----------------+---------------------+
    |  1 | CVB_test00        | 129.101.163.79  | 129.101.193.129 | 2006-03-21 10:00:00 |
    |  2 | Name des Auftrags | 129.101.193.129 | 129.101.160.57  | 2006-03-23 08:02:59 |
    +----+-------------------+-----------------+-----------------+---------------------+
    2 rows in set (0.14 sec)
    Problem gelöst, ganz herzlichen Dank! *Claus sich vor Elrond verneigt.*

    Gruß
    Claus

  9. #9
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    03.10.2001
    Ort
    potsdam
    Beiträge
    881
    was soll das erst werden, wenns schwierig wird ?
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  10. #10
    Registrierter Benutzer Avatar von ClausVB
    Registriert seit
    05.08.2005
    Ort
    NRW - Deutschland
    Beiträge
    106
    Zitat Zitat von elrond
    was soll das erst werden, wenns schwierig wird ?
    Dann werde ich Dein Sklave :-) zuerst für ein Jahr und wenns noch schwieriger wird auf Lebenszeit :-).

    Gruß und Danke,
    Claus

  11. #11
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von ClausVB
    Dann werde ich Dein Sklave :-) zuerst für ein Jahr und wenns noch schwieriger wird auf Lebenszeit :-).

    Gruß und Danke,
    Claus
    Das sind ja mal vorbildliche Angebote.
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •