Suchfunktion über mehrere Tabellen

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

  • Suchfunktion über mehrere Tabellen

    Guten Tag,
    s
    es wird eine Suchfunktion benötigt, die mehrere Tabellen durchsuchen kann. Wie kann dieses am einfachsten programmiert werden ?

    Folgende Funktion durchsucht nur die Tabelle "links". Es gibt aber noch die Tabelle links_search, links_mags, links, labs.


    PHP-Code:
        function searchForName($searchterm)
        {
            
    $this->db->select("*""links""(name LIKE '%".$searchterm."%')" "name ASC""""""");
            
    $row['name'] = htmlentities($row['name']);
            
            
    $this->numResults $this->db->db_affected_rows;

            while (
    $row $this->db->fetch_array())
            {
                
    $entry_links[] = $row;
            }

        } 

    Vielen Dank.

    Gruß Compu

  • #2
    erstmal *verschieb zu sq*, dann sei dir das thema JOIN sehr zu empfehlen. einfach mal suchen und testen
    h.a.n.d.
    Schmalle

    http://impressed.by
    http://blog.schmalenberger.it



    Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
    ... nur ohne :-)

    Kommentar


    • #3
      Hallo,

      also ich raffe es einfach nicht.
      Habe den Thread gefunden, in dem beschrieben ist.

      Mein Versuch lautet:

      PHP-Code:
              $this->db->select("*"
                                
      "links_company
                                 LEFT JOIN links_search ON (links_search.name = "
      .$searchterm.")
                                 LEFT JOIN links_uni ON (links_uni.name = "
      .$searchterm.")
                                 LEFT JOIN links_mags ON (links_mags.name = "
      .$searchterm.")",
                                
      "(links_company.name = '".$searchterm."')",
                                 
      "name ASC"""""""); 
      Ergibt das Sinn ?

      Die SELECT Funktion ist ein member eine DB Wrapper Klasse:
      Sie muss in folgendem Format übergeben werden.

      PHP-Code:
      $this->db->select("spalten""tabellenname""from""sort"""""""); 
      JOINs sind wirklich das schwierigste an Datenbanken.

      Danke
      Zuletzt geändert von compuboy1010; 18.02.2004, 16:40.

      Kommentar


      • #4
        warum testest du das nicht mit phpmyadmin?

        ... und ich würde empfehlen, die spalten explizit MIT alias anzugeben, da
        du sonst nicht weisst, aus welcher tabelle "name" stammt.
        Kissolino.com

        Kommentar


        • #5
          Hallo,

          also ich habe vergessen, dass sie Zeilen in den verschiedenen Tabellen nichts miteinander zu tun haben.

          Das sind alles verschiedene Datensätze.
          Es sollen nur alle Sätze gefunden werden, in denen der Suchbegriff im Namen vorkommt.

          Wie ist das mit den Alisas gemeint ?

          Danke
          Zuletzt geändert von compuboy1010; 18.02.2004, 16:42.

          Kommentar


          • #6
            Re: Suchfunktion über mehrere Tabellen

            Original geschrieben von compuboy1010
            Folgende Funktion durchsucht nur die Tabelle "links". Es gibt aber noch die Tabelle links_search, links_mags, links, labs.
            sind diese tabellen denn überhaupt unterschiedlich aufgebaut, oder haben sie alle die selbe struktur, und mehrere tabellen verwendest du nur zur logischen trennung mehrerer bereiche?

            falls letzteres, bitte schleunigst alle daten in eine tabelle packen, mit zusätzlicher spalte für den bereich.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              erstmal Frage: wasfür Datenbank setzt du ein ?

              Kommentar


              • #8
                Hallo,

                nein, nein die sind natürlich verschieden aufgebaut.
                Ein gewisses Grundwissen über Normalisierung habe ich schon.

                Nur die "JOIN" bereiten mir ewig Schwierigkeiten.

                Wenn nun ein Suchbegirff eingeben wird, kommt die folgende Fehlermeldung:

                SELECT * FROM links_company LEFT JOIN links_search ON (links_search.name = test) LEFT JOIN links_uni ON (links_uni.name = test) LEFT JOIN links_mags ON (links_mags.name = test) WHERE (links_company.name = 'test') ORDER BY name ASC
                Unknown column 'test' in 'on clause'
                1054

                PS: Es wird die mySQL(aktuellste Version) DB verwendet.
                Zuletzt geändert von compuboy1010; 19.02.2004, 10:57.

                Kommentar


                • #9
                  Hallo,

                  es funktioniert einfach nicht.
                  Habe versucht ein ähnlich Problem zu finden. Aber nix ....

                  Könnte mir jemand die Lösung geben ?

                  Danke

                  Kommentar


                  • #10
                    gibt's die spalte test den?

                    oder meintest du den string 'test' ?
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      Guten Tag,

                      nein die Spalte "test gibt es nicht". Das ist der Suchbegriff, den ich auf der Seite eingegeben habe.

                      Kommentar


                      • #12
                        dann solltest du um den suchbegriff, da es sich ja um einen string handelt, auch diese lustigen hochkommas setzen...
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          wenn die Tabellenstruktur gleich sind, kannste auch UNION (ab Vers. 4...)einsetzen.

                          Kommentar


                          • #14
                            Original geschrieben von compuboy1010
                            nein, nein die sind natürlich verschieden aufgebaut.
                            und mit tausenden von NULL werten rumhantieren is nicht lustig
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #15
                              Oh weia,

                              nun habe ich mich so auf die JOINs konzent, dass mir das nicht aufgefallen ist.

                              dennoch:
                              PHP-Code:
                                      $this->db->select("*"
                                                        
                              "links_company
                                                         LEFT JOIN links_search ON (links_search.name = '"
                              .$searchterm."')
                                                         LEFT JOIN links_uni ON (links_uni.name = '"
                              .$searchterm."')
                                                         LEFT JOIN links_mags ON (links_mags.name = '"
                              .$searchterm."')",
                                                        
                              "(links_company.name = '".$searchterm."')",
                                                         
                              "name ASC"""""""); 
                              ergibt:

                              SELECT * FROM links_company LEFT JOIN links_search ON (links_search.name = 'test') LEFT JOIN links_uni ON (links_uni.name = 'test') LEFT JOIN links_mags ON (links_mags.name = 'test') WHERE (links_company.name = 'test') ORDER BY name ASC
                              Column: 'name' in order clause is ambiguous
                              1052

                              Kommentar

                              Lädt...
                              X