Stichwortsuche über 3 Tabellen

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

  • Stichwortsuche über 3 Tabellen

    Hallo Forum,

    ich möchte eine ganz simple Stichwortsuche realisieren:

    PHP-Code:
    $abfrage mysql_query ("SELECT * FROM kontakte WHERE unternehmen LIKE '%".$_POST["search_string"]."%' 
    OR funktion LIKE '%"
    .$_POST["search_string"]."%'"); 
    So funktioniert es, wie gewünscht.
    Nun habe ich aber 3 Tabellen, die ich mit einer Query abfragen muss.

    Wenn ich beim obigen Beispiel
    PHP-Code:
    ...SELECT FROM kontakteberaterstandorte WHERE kontakte.unternehmen LIKE... 
    OR ... 
    LIKE... OR berater.vorname LIKE... 
    angebe (das wären etwa 10 'LIKES'), dann bekomme ich eine endlos lange Ergebnisliste.

    Weiß jemand, wie ich das korrekt hinbekommen könnten?

    Vielen Dank für Eure Hilfe!

    Fabian Klein
    Zuletzt geändert von fab_k; 22.04.2009, 19:39.

  • #2
    Nun habe ich aber 3 Tabellen, die ich mit einer Query abfragen muss.
    Das ist schön, aber was hat das mit deinem Problem zu tun???

    Wenn ich beim obigen Beispiel [etwa 10 'LIKES'] angebe [...], dann bekomme ich eine endlos lange Ergebnisliste.
    Weil alle Ergebnisse darauf zutreffen. Was wundert dich daran?

    Also, was ist dein Problem?

    Kommentar


    • #3
      Hallo TobiaZ,

      danke erstmal!

      Es ist so: Wenn ich einen Begriff über diese Query suche, der nur 1 Mal in einem Feld einer Tabelle vorkommt, dann bekommen ich nicht ein Ergebnis, sondern etwa 100 - mehr, als es übehaupt insgesamt Einträge gibt (?).

      Nochmals, vielen Dank,

      Fabian

      Kommentar


      • #4
        Habe gerade etwas gesehen, sorry:

        Ich bekomme tatsächlich nur ein Ergebnis, dies allerdings etwa 100 Mal untereinander...

        Kommentar


        • #5
          Du machst ja auch einen 2fachen CROSS JOIN:
          Code:
          FROM kontakte, berater, standorte
          Wenn du in jeder Tabelle 100 Einträge hast, ergibt das 100 * 100 * 100 = 1.000.000 Suchresultate.

          Wenn die Tabellen in irgendeiner Form miteinander verknüpft sind, solltest du LEFT oder INNER JOINS verwenden.

          Wenn es dir nur darum geht, 3 Tabellen aneinander zu hängen, dann brauchst du UNION.
          Zuletzt geändert von h3ll; 22.04.2009, 20:49.

          Kommentar


          • #6
            Hallo h3ll,

            Du hast Recht - UNION wird mir helfen... werde es gleich mal ausprobieren... bin ich gerade nicht drauf gekommen... danke!

            Kommentar


            • #7
              hier bekommen ich eine Fehlermeldung (?):
              PHP-Code:
              $liste_kontakte mysql_query ("(SELECT * FROM kontakte WHERE unternehmen_name LIKE 
              '%"
              .$_POST["search_keyword"]."%') UNION (SELECT vorname FROM berater WHERE vorname LIKE '%".$_POST["search_keyword"]."%')"); 

              Kommentar


              • #8
                Original geschrieben von fab_k
                hier bekommen ich eine Fehlermeldung (?):
                [color=#bbbbbb]<sotunalsobichdummheitgutfindenwuerdeironie>[/color]
                Gut, dass du sie nicht nennst - jeder Mensch sollte ein paar Geheimnisse haben!
                [color=#bbbbbb]</sotunalsobichdummheitgutfindenwuerdeironie>[/color]
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Wenn du direkt POST-Variablen in dein Query gibst, wird man deine Seite sehr leicht hacken können. Mach dich mal über SQL-Injections schlau.

                  Und SELECT * solltest du auch nicht verwenden.
                  Zuletzt geändert von h3ll; 22.04.2009, 21:51.

                  Kommentar


                  • #10
                    Ich weiß, danke für den Hinweis. Diese Seite bekommt einen Verzeichnis-Schutz, sie ist nicht öffentlich, sondern nur für eine kleine Gruppe von Personen.

                    -> Trotzdem mysql_real_escape_string, addslashes nötig?

                    Kommentar


                    • #11
                      @ Wahsaga: Sorry:

                      Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\...\...\vertriebskontakte.php on line 680

                      Kommentar


                      • #12
                        *seufz*

                        Das ist nur ein Folgefehler, weil deine Abfrage fehlerhaft war, du aber trotzdem so tust, also ob nichts wäre, und sie auswerten willst.

                        mysql_error liefert dir die Fehlermeldung der Datenbank.
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          Original geschrieben von fab_k
                          Ich weiß, danke für den Hinweis. Diese Seite bekommt einen Verzeichnis-Schutz, sie ist nicht öffentlich, sondern nur für eine kleine Gruppe von Personen.
                          Und deshalb darf man pfuschig programmieren? Ein Verzeichnisschutz wird dir übrigens nicht gegen XSS-Attacken helfen.

                          Original geschrieben von fab_k
                          -> Trotzdem mysql_real_escape_string, addslashes nötig?
                          mysql_real_escape_string ist _immer_ nötig, wenn du Strings in ein Query einbaust. Schon allein wegen den Sonderzeichen, die sonst dein Query unabsichtlich kaputt machen können.

                          addslashes() nicht verwenden.

                          Kommentar


                          • #14
                            ok, vielen Dank für den Tipp!

                            @ wahsaga: Du hast mir auch geholfen, mysql_error() kannte ich noch gar nicht...

                            PHP-Code:
                            The used SELECT statements have a different number of columns 
                            -> Absolut logisch, da können nur gleich strukturierte Tabellen mit UNION zusammen gefügt werden?

                            Kommentar


                            • #15
                              T1a, dass du bisher nicht in der Lage warst, die Regeln zu lesen fällt schon bei der Überbreite deines Postings auf. Dort steht auch mysql_error drin!

                              Kommentar

                              Lädt...
                              X