tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Friesi
  • 1 Beitrag von Yaslaw
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
693
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    eingeist eingeist ist offline Grünschnabel
    Registriert seit
    Sep 2010
    Beiträge
    2
    Hallo Community,

    ich habe an der Ausgabe von zwei Tabellen bereits auch einige Stunden gebastelt und bin heute auf das Ergebnis gekommen, welches soweit auch funktioniert.
    Wär ich früher auf dieses Forum gestoßen, hätte ich mir viel Zeit erspart und es wäre leichter gewesen. Aber es hat mir nicht geschadet intensiv zu recherchieren und mich durch einige Erklärungen durchzukämpfen. Da ich aber in diesem Bereich noch ein ziemlicher Anfänger bin, hab ich z.T. noch leichte Verständnisschwierigkeiten.
    Aber wie gesagt, ich bekomme bereits aus zwei Tabellen mit Union die gewollten Ergebnisse geliefert.
    Ein Problem bleibt dabei aber: In beiden Tabellen befindet sich eine für die jeweilige Tabelle eindeutige ID. Da aus beiden Tabellen die nur in den jeweiligen Tabellen eindeutige ID ausgelesen wird, kann es passieren, daß in der Endtabelle die ID-Spalte in einem ungünstigen Fall nicht mehr eindeutig ist. Dies stört evtl. die Ausgabe nicht, aber eine weitere Verarbeitung in einem Programm gestaltet sich dann doch sehr unkonfortabel. Besteht die Möglichkeit, daß man der gelieferten Tabelle eine Auto-Increment-Spalte bei der Select Abfrage hinzufügt um eine Eindeutigkeit zu gewährleisten?

    Würde mich freuen, wenn mir jemand einen Tipp geben könnte. Selbst wenn sich herausstellt, daß es mit MySQL nicht so klappt wie ich's gern hätte.

    Danke schon mal für's lesen!

    Viele Grüße,

    Ben

    Edit:
    Sorry, hab vorhin in der Eile mein Beispiel vergessen:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    (SELECT Historyid, Null as ID, Typ, Ereignis, Null, Datum
    FROM tabHistory
    WHERE `Typ` = 'Bericht') 
    Union 
    (SELECT Null, BestandID, Typ, Ereignis, Folgeaktion, Datum
    FROM tabBestand
    WHERE `Typ` = 'Bericht') 
    ORDER BY Datum ASC;
    Die Ausgabe paßt soweit. Ich befürchte nur, daß in einem sehr ungünstigen Fall eben zwei mal die selbe ID bei HistoryID und BestandID auftaucht. Daher hab ich sie in zwei unterschiedliche Spalten gegeben und hätte gerne eine eindeutige ID-Spalte mit Auto_Increment. Ist sowas überhaupt möglich?
    Geändert von eingeist (17.09.10 um 18:46 Uhr) Grund: Unvollständiger Post
     

  2. #2
    Friesi Friesi ist offline Mitglied Gold
    Registriert seit
    Apr 2002
    Ort
    Stromberg (NRW)
    Beiträge
    175
    Habe gerade etwas in der Doku vom Mysql gesucht allerdings keine Funktion gefunden mit der man das realisieren könnte.
    Eventuell wenn man eine temporäre Tabelle erstellen würde.

    Ich hätte da allerdings noch eine andere Idee.
    Man könnte einen MD5 Hash über Historyid, Typ und Datum erstellen, welche dann "eindeutig" sein sollte.

    Also so hab ich mir das gedacht:
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    (
        SELECT 
            MD5(Historyid+Typ+Datum) AS pID
            Historyid, 
            NULL AS ID, 
            Typ, 
            Ereignis, 
            NULL, 
            Datum
        FROM tabHistory
        WHERE `Typ` = 'Bericht'
    ) UNION (
        SELECT 
            MD5(BestandID+Typ+Datum) AS pID
            NULL, 
            BestandID, 
            Typ, 
            Ereignis, 
            Folgeaktion, 
            Datum
        FROM tabBestand
        WHERE `Typ` = 'Bericht'
    ) 
    ORDER BY Datum ASC;
    eingeist bedankt sich. 

  3. #3
    eingeist eingeist ist offline Grünschnabel
    Registriert seit
    Sep 2010
    Beiträge
    2
    Hallo Friesi!

    Vielen Dank für Deine Antwort! Zum Einen, daß Du mir die Scheuklappen bzgl. der Auto_Increment Geschichte weggenommen hast und zum Anderen, daß Du mir dadurch auch gleich einen Lösungsvorschlag gegeben hast.

    Ich hab natürlich gleich mal rumprobiert ... und dachte, wenn man MD5 wegläßt müßte doch der entsprechende String im "Klartext" zu erhalten sein. Hat irgendwie nicht ganz geklappt. Da ich aber keinen MD5 Hash brauche, hab ich weitergebastelt und gelesen und mir folgende Lösung erarbeitet:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    (
        SELECT 
            CONCAT(CAST(Historyid as Char), 'H') AS pID
            Historyid, 
            NULL AS ID, 
            Typ, 
            Ereignis, 
            NULL, 
            Datum
        FROM tabHistory
        WHERE `Typ` = 'Bericht'
    ) UNION (
        SELECT 
            CONCAT(CAST(BestandID as Char), 'B') AS pID
            NULL, 
            BestandID, 
            Typ, 
            Ereignis, 
            Folgeaktion, 
            Datum
        FROM tabBestand
        WHERE `Typ` = 'Bericht'
    ) 
    ORDER BY Datum ASC;

    Zur Erklärung:
    CAST(HistoryID as Char) zur Konvertierung der ID als String
    CONCAT(... , ...) zum Zusammenfügen der Zeichen

    Also Friesi, vielen Dank nochmal!

    Sollte jemand aber doch noch wissen oder erfahren, wie man die erste Spalte als eigenständige Auto_Increment führen kann, würde ich mich über eine Antwort freuen. Lerne gerne dazu.
    Auch anderen Ideen über bin ich natürlich aufgeschlossen.

    Viele Grüße,

    Ben
    Geändert von eingeist (17.09.10 um 22:52 Uhr)
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    MySQL?

    1) Normalerweise ergänzt man den Schlüssel beim UNION direkt
    2) oder als 2tes eindeutiges Feld
    3) oder man erstellt wirkliche eine neue ID analog einer Zeilennummer (Beispiel der Zeilennummerierung in MySQL)

    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    --Eindeutiger Schlüssel mit Prefix
    SELECT 
        CONCAT('A', a.id) AS unionid,
        a.feld1
    FROM tableA AS a
    UNION SELECT
        CONCAT('B', b.id) AS unionid,
        b.feld1
    FROM tableA AS b
     
    --Schlüssel Eindeutig über 2 Felder. source und id
    SELECT 
        'A' AS SOURCE,
        a.id,
        a.feld1
    FROM tableA AS a
    UNION SELECT
        'B' AS SOURCE,
        b.id,
        b.feld1
    FROM tableA AS b
     
    --oder in MySQL ein wirklich neue ID,
    SELECT
        @rownum:=@rownum+1 AS rownum,
        t.*
    FROM
        (SELECT @rownum:=0) AS vars,
        (SELECT 
            a.id,
            a.feld1
        FROM tableA AS a
        UNION SELECT
            b.id,
            b.feld1
        FROM tableA AS b) AS t
    Friesi bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

Ähnliche Themen

  1. MySQL - Zwei Tabellen in Abfrage zusammenführen
    Von d-braun im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 06.09.10, 12:04
  2. Zwei Tabellen mit SELECT zusammenführen
    Von RedWraith im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 24.06.08, 10:02
  3. MySQL-Abfrage über zwei Tabellen und zwei Zeilen
    Von bnc-bang im Forum Relationale Datenbanksysteme
    Antworten: 7
    Letzter Beitrag: 13.04.07, 20:43
  4. auto_increment Spalte neu ordnen
    Von Eistee im Forum Relationale Datenbanksysteme
    Antworten: 5
    Letzter Beitrag: 01.06.05, 16:30
  5. JTable: Zwei Tabellen zusammenführen?
    Von equestenebrarum im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 5
    Letzter Beitrag: 29.04.05, 15:27