Unmöglich? Volltextsuche über 2 Tabellen welche durch Hilfstabelle verbunden sind

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

  • Unmöglich? Volltextsuche über 2 Tabellen welche durch Hilfstabelle verbunden sind

    Hallo Leute,

    ich habe ein Problem bei dem ich überhaupt nicht weiter kommen. Vielleicht könnt Ihr mir einen Tip geben bzw. sagen ob mein Vorhaben überhaupt zu realisieren ist.

    Ich habe zwei Tabellen

    Tabelle: Dokumente

    id | name | kommentar
    ---------------------------------------
    1 | Schreiben | Testdokument
    2 | Bild | Grafik

    Tabelle: Kontakt

    id | name | telefon
    ---------------------------------------
    1 | Müller | 123456
    2 | Muster | 7891011

    Zu dem Dokument können die Kontakte erfasst werden.
    Die Zusammenhänge werden in der Tabelle Link Dargestellt.

    id | dokumentid | kontaktid
    ---------------------------------------
    1 | 1 | 2
    2 | 1 | 1

    Über eine eine Suche möchte ich die betreffenden Dokument ausgeben, worin auch die dazugehörigen Kontakte einbezogen werden.

    Beispiel:
    Suche nach Muster => gibt ID 1 von Dokumente aus
    Suche nach Scheiben => gibt ID 1 von Dokumente aus

    Ich bekomme es nicht hin, wie anhand der Hilfstabelle Link in die Suche auch die Kontakte mit verknüpft werden können.
    Verknüpfung von Tabellen anhand der ID sind klar. Aber hier habe ich ja eine 3. Tabelle, die aber auch notwendig ist,
    da es ja mehrfache Verbindungen geben kann ;(

    Versteht Ihr was ich meine?

    Danke für eure Hinweise....

  • #2
    Hallo,

    leider verstehe ich nicht genau, wie du es meinst. Dein eigener (wenn auch nicht vollständig funktionstüchtiger) Ansatz könnte das näher beleuchten.

    Dennoch denke ich, dass es auf Joins hinausläuft, mit denen du dich erstmal grundlegend beschäftigen solltest.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Huhu,

      erstmal danke das du dir meinen verwirrenden beitrag angeschaut hast.

      Ich will folgendes: Dokumente mit Kontakten verknüpfen. Würde jedes Dokument einen Kontakt haben wäre das mit Join natürlich kein Problem. Jetzt hat aber jedes Dokument mehrere Kontakte. Die Beziehung wird in der Tabelle Links dargestellt.

      Ich möchte nun eine Volltextsuche über die Dokumente realisieren, wobei auch in den Namen der zugehörigen Kontakte gesucht wird. Ich habe wirre Sachen probiert die nicht zum erfolg führen. ich habe null plan, wie und ob ich das realisieren kann.

      Kommentar


      • #4
        Es ist auch so kein Problem. Joins funktionieren auch über mehrere Tabellen.

        Nach diesem Prinzip solltest du vorgehen:

        Code:
        select <wasauchimmer>
        from <n:m-Tabelle> as n2m
        left join <n-Tabelle> as n on n.id = n2m.n_id
        left join <m-Tabelle> as m on m.id = n2m.m_id
        where m.<eine Spalte> = <ein Wert>
            and n.<andere Spalte> = <anderer Wert>
            or n.<noch eine Spalte> = <noch ein Wert>
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          da bin ich baff, dass es so einfach gehen soll...

          Da sieht man, wer ein Profi ist

          Ich probiers aus und melde mich nochmal.

          Danke für die Mühe!

          Kommentar


          • #6
            Komme mit dem nächsten ähnlichen Problem nicht weiter...

            Dokumente können untereinander verlinkt werden. Die Linkungen befinden sich wieder in einer Datenbank Tabelle Link.

            Folgender Query ist vorhanden und funktioniert.
            Zu der Tabelle Dokument werden Content und Notice per Join hinzugefügt, um eine Volltextsuche zu ermöglich.

            Code:
            SELECT 
            tbldocuments.*
            FROM 
            tbldocuments 
            LEFT JOIN tbldocumentcontent ON tbldocuments.id=tbldocumentcontent.document 
            LEFT JOIN tbldocumentnotice ON tbldocuments.id=tbldocumentnotice.document 
            WHERE (CONCAT_WS(' ', tbldocuments.name, tbldocumentnotice.notice) LIKE'%test%') LIMIT 0,30
            jetzt soll anhand der Tabelle Link die Dokumente die verlinkt sind mit durchsucht werden können

            Code:
            SELECT 
            tbldocuments.*
            FROM 
            tbldocuments 
            LEFT JOIN tbldocumentcontent ON tbldocuments.id=tbldocumentcontent.document 
            LEFT JOIN tbldocumentnotice ON tbldocuments.id=tbldocumentnotice.document 
            LEFT JOIN tbldocumentlinks ON tbldocuments.id=tbldocumentlinks.document 
            LEFT JOIN tbldocuments as doc2 ON tbldocumentlinks.target = doc2.id
            WHERE (CONCAT_WS(' ', tbldocuments.name, tbldocumentnotice.notice, doc2.name) LIKE'%test%') LIMIT 0,30
            das klappt allerdings nicht mehr. Wenn ich es richtig verstehe, muss bei deinem Lösungsweg die Tabelle Link die Tabelle sein, worin die passenden hinzugefügt werden. Wie bekomme ich es aber auf die Art und Weise hin, das tbldocuments die Ausgangstabelle ist oder ist es jetzt eine Sackgasse?

            Die Verknüpfung mit den Kontakten muss auch noch dazu basierend auf der tbldocuments.id und einer tabelle tblcontactlink
            Zuletzt geändert von mr_apollon; 16.09.2010, 11:32.

            Kommentar


            • #7
              Ist nur eine Vermutung, aber in der Where-Klausel beziehst du dich auf tbldocuments.name, meinst aber nicht zufällig doc2.name?
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                Habs gerade geändert

                Ich suche/ will suchen in tbldocuments.name und den verlinkten doc2.name

                Ich denke aber, das der Zugriff auf die links und das weitere Join der vorhandenen Tabelle tbldocument sinnlos ist bzw. nicht funktionieren kann. Da ja in Links mehrere Treffer zum Ursprungsdokument vorhanden sein können.

                Code:
                LEFT JOIN tbldocumentlinks ON tbldocuments.id=tbldocumentlinks.document 
                LEFT JOIN tbldocuments as doc2 ON tbldocumentlinks.target = doc2.id
                Ich habe aber auch null Plan wie ich das in Verbindung setzen kann.

                Verzwickt oder?
                Zuletzt geändert von mr_apollon; 16.09.2010, 11:32.

                Kommentar

                Lädt...
                X