Lydia.W: INSERT mit Zusammenfassung

Hallo Ihr Lieben,

Ich habe 3 Tabellen:
1. die Suchtabelle
2. Komponisten
3. Lieder

Zu jedem Komponisten gibt es natürlich unendlich viele Lieder
Jetzt möchte ich in die Suchtabelle in eine Zeile, ein Feld den Komponisten und alle Stücke eintragen.

Suchtabelle:
Feld: Suchwort
Inhalt: Lydia / Song1 / Song2 / Song3

Wie kann man das mit MySql bewerkstelligen.

Ich habe es mit dem Insert_SELECT versucht, aber ich kriege nur die Komponisten in eine Zeile:

INSERT INTO suchtabelle
SELECT
 Komponistname as Suchwort
 FROM Komponist

Wie kann ich das erweitern, dass ich eine Verbindung zu den Liedern bekomme und das Feld 'Suchwort' mit den Titeln erweitere?

Bin für jeden Tipp dankbar.
Liebe Grüße
Lydia.

  1. Ich habe 3 Tabellen:

    1. die Suchtabelle
    2. Komponisten
    3. Lieder^

    Wie sehen die Tabellen _genau_ aus?

    Wir haben doch Komponisten und Lieder, warum kommst Du nicht mit 2 Tabellen?

    1. Hallo Ilja,

      danke für den Hinweis bzgl. des Group_concat, den kannte ich noch garnicht und werde ihn mir anschauen.

      Hallo King^Lully,
      ich weiß, dass Suchtabellen suboptimal sind.
      Da mein Beispiel aber nur ein Beispiel ist und meine Daten extrem komplexer, dauert der JOIN viel zu lange, bis er ausgeführt wird.
      Und nichts ist langweiliger, als zu warten ...

      Die Tabellen sehen so aus
      tblKomponist: id, k_name
      tblLied: id, l_name, k_id
      tblSuchtabelle: id, suchwort

      Und jetzt möchte ich in der Suchtabelle einen Datensatz, der so aussieht:
      "1", "Lyida / Lied vom Tod / Lied von der Liebe"
      "2", "Heino / Lied von der Lippe / Lied im Herzen / Lied in Blond"

      Bin für jede konstruktive Hilfe dankbar :-)
      Ly.

      1. Da mein Beispiel aber nur ein Beispiel ist und meine Daten extrem komplexer, dauert der JOIN viel zu lange, bis er ausgeführt wird.
        Und nichts ist langweiliger, als zu warten ...

        Die Tabellen sehen so aus
        tblKomponist: id, k_name
        tblLied: id, l_name, k_id
        tblSuchtabelle: id, suchwort

        Und jetzt möchte ich in der Suchtabelle einen Datensatz, der so aussieht:
        "1", "Lyida / Lied vom Tod / Lied von der Liebe"
        "2", "Heino / Lied von der Lippe / Lied im Herzen / Lied in Blond"

        Bin für jede konstruktive Hilfe dankbar :-)

        Also, wir wiederholen gerne noch einmal, es gibt hier keinen Grund mit "Suchtabellen" zu kommen, denn:

        • das Datendesign ist definitiv nicht komplex
        • das Verwalten der "Suchtabellen" ist nicht trivial, da besteht die Gefahr des Auseinanderlaufens der Daten
        • gäbe es mehrere Komponisten für ein Lied, so kommst Du mit drei Tabellen: "Komponisten", "Lieder" und "Komponisten_Lieder"

        Aber gut, Iljas Tipp wird funktionieren, no prob.

        1. Hallo King^Lully,

          DAS IST EIN BEISPIEL! Ich habe es erfunden! Bei 3 Tabellen würde ich auch keine Suchtabelle einrichten. Aber mein Original-Datenmodell ist ungleich komplexer. Nur wollte ich es hier nicht erklären, da es dann keiner versteht, und es ging mir nicht um die Notwendigkeit, sondern um die Frage, wie man Daten gruppieren kann.

          Ich habe insgesamt ca. 20 Tabellen, aus denen ich bestimmte Daten benötige, und obwohl ich alle nötigen Indexe gesetzt habe, dauert der JOIN dieser Tabellen unglaublich lange.
          Und da die Daten nicht 'tagesaktuell' sein müssen, kann ich sie auch abends über einen Cronjob in die Tabelle schreiben, weil dann die Abfrage erheblich einfacher ist und sehr viel schneller ist.

          Der Tip von Ilja funktioniert wunderbar.
          Danke Ilja.

          Liebe Grüße
          Ly.

          Da mein Beispiel aber nur ein Beispiel ist und meine Daten extrem komplexer, dauert der JOIN viel zu lange, bis er ausgeführt wird.
          Und nichts ist langweiliger, als zu warten ...

          Die Tabellen sehen so aus
          tblKomponist: id, k_name
          tblLied: id, l_name, k_id
          tblSuchtabelle: id, suchwort

          Und jetzt möchte ich in der Suchtabelle einen Datensatz, der so aussieht:
          "1", "Lyida / Lied vom Tod / Lied von der Liebe"
          "2", "Heino / Lied von der Lippe / Lied im Herzen / Lied in Blond"

          Bin für jede konstruktive Hilfe dankbar :-)

          Also, wir wiederholen gerne noch einmal, es gibt hier keinen Grund mit "Suchtabellen" zu kommen, denn:

          • das Datendesign ist definitiv nicht komplex
          • das Verwalten der "Suchtabellen" ist nicht trivial, da besteht die Gefahr des Auseinanderlaufens der Daten
          • gäbe es mehrere Komponisten für ein Lied, so kommst Du mit drei Tabellen: "Komponisten", "Lieder" und "Komponisten_Lieder"

          Aber gut, Iljas Tipp wird funktionieren, no prob.

  2. yo,

    Jetzt möchte ich in die Suchtabelle in eine Zeile, ein Feld den Komponisten und alle Stücke eintragen.

    mir ist noch nicht klar, welchen sinn das haben sollte, aber mysql bietet dafür eine sehr schöne funktion GROUP_CONCAT genannt an, die du für deine zwecke verwenden kannst.

    ich würde dir den link in der mysql doku hier einbinden, aber ich komme zur zeit nicht auf www.mysql.de rauf. aber dort kannst du in der doku nachschauen.

    Ilja

    1. Jetzt möchte ich in die Suchtabelle in eine Zeile, ein Feld den Komponisten und alle Stücke eintragen.

      mir ist noch nicht klar, welchen sinn das haben sollte, aber mysql bietet dafür eine sehr schöne funktion GROUP_CONCAT genannt an, die du für deine zwecke verwenden kannst.

      Wobei wir an dieser Stelle vor solchen "Suchtabelle" dringlichst warnen wollen. Diese braucht man eben nicht ur nicht, denn dafür hat man SELECTs mit JOINs, sondern sie sind auch sehr schädlich für Zwecke des richtigen Datendesigns.