Full Text Search

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

  • Full Text Search

    Hallo,

    Ich habe versucht eine Datenbanksuche zu programmieren. Dazu habe ich folgendes Stueck Code:

    PHP-Code:
    $friends_add mysql_query ("SELECT username from users where MATCH(username) AGAINST ('%".$_POST[search]."%');") or die ("error"); 
    Ich habe folgende Datenbank:

    id username

    1 donpatricio
    2 philip
    3 patricio

    In ein Text Formular gebe ich Patricio ein. Wenn ich nun auf Submit klicke und es natuerlich durch eine while Schleife laufen lasse, erscheint mir jedoch nur der Name Patricio und nicht auch DonPatricio, was doch sein sollte, da ich die Prozente vor und nach der Variable hingeschreiben habe.

    Ich hoffe mir kann jemand helfen.
    Vielen lieben Dank.
    Zuletzt geändert von DonPatricio; 11.06.2008, 13:29.

  • #2
    schon mal die %-Zeichen weggelassen?
    it's not a bug,
    it's a feature!

    Kommentar


    • #3
      PHP-Code:
      $friends_add mysql_query ("SELECT username from users where username LIKE '%".$_POST['search']."%'"); 
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        Warum sollte ich die % Zeichen weglassen. Ich will ja, das sowohl Patricio und DonPatricio ausgegeben wird.

        Wenn ich sie weggebe geht es natuerlich nicht ...

        @jahlives:

        So wie du es gemacht hast funktioniert es, aber ich wurde es gerne meine Methode machen, da sie schneller funktioniert wenn man mehrere tausende Datensaetze hat, ausserdem wirde es deine Methode nicht nach der Wichtigkeit geordnet. Wenn man patricio eingibt wurde als erstes donpatricio ausgegeben, weil es als erstes in die db eingetragen wurde, verstehst du?
        Zuletzt geändert von DonPatricio; 11.06.2008, 13:31.

        Kommentar


        • #5
          * statt % verwenden
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar


          • #6
            Original geschrieben von DonPatricio

            Wenn ich sie weggebe geht es natuerlich nicht ...
            Dann machst du sonst etwas falsch, vielleicht hast du sie dem falschen gegeben . Das % ist bei der Volltextsuche ein Zeichen wie jedes andere. Mehr dazu in MySQL-Volltextsuche
            Gruss
            H2O

            Kommentar


            • #7
              Auch mit * funktioniert es nicht ..

              @H2O: Ich meinte, wenn ich die % weggebe werden nicht beide Werte angezeigt, sondern wie es sollte wird Patricio ausgegeben, wenn ich es eingebe. Aber es wird eben nicht auch noch DonPatricio ausgegeben.

              Kommentar


              • #8
                Probiere mal:

                SELECT username from users where MATCH(username) AGAINST ('*Patricio' IN BOOLEAN MODE)

                Kommentar


                • #9
                  Nur Patricio wird ausgegeben, funktioniert also auch nicht richtig ...

                  Irgendwie bin ich am verzweifeln.

                  Kommentar


                  • #10
                    Original geschrieben von DonPatricio
                    Irgendwie bin ich am verzweifeln.
                    Hat schon mal jemand gezählt, wieviel Verzweifelte sich hier im Forum tummeln?
                    Original geschrieben von DonPatricio
                    Auch mit * funktioniert es nicht ..
                    Natürlich nicht, auch * ist ein ganz normales Zeichen. Oder hast du in den Beispielen im Handbuch auch nur irgendeine Form von Platzhaltern gesehen? Die würden es ja verunmöglichen, die Relevanz zu berechnen.
                    PHP-Code:
                    $friends_add mysql_query("SELECT username from users where MATCH(username) AGAINST('Patricio') or exit(mysql_error());
                    print_r(
                    $friends_add); 
                    Müsste gehen. Kann es leider nicht testen, da ich im Moment nur InnoDB-Tabellen habe.
                    Gruss
                    H2O

                    Kommentar


                    • #11
                      Natürlich nicht, auch * ist ein ganz normales Zeichen. Oder hast du in den Beispielen im Handbuch auch nur irgendeine Form von Platzhaltern gesehen?
                      Also das Manual meint dazu:
                      'apple*'
                      Find rows that contain words such as “apple”, “apples”, “applesauce”, or “applet”.
                      http://dev.mysql.com/doc/refman/5.0/...t-boolean.html
                      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                      Kommentar


                      • #12
                        Original geschrieben von DonPatricio
                        Nur Patricio wird ausgegeben, funktioniert also auch nicht richtig ...

                        Irgendwie bin ich am verzweifeln.
                        Hast du auch IN BOOLEAN MODE angegeben?

                        Kommentar


                        • #13
                          Wenn das hier meinst. Funktioniert auch nicht.

                          PHP-Code:
                           $friends_add mysql_query ("SELECT * from users where MATCH(username) AGAINST ('*$_POST[search]*' IN BOOLEAN MODE);") or die ("error"); 

                          Kommentar


                          • #14
                            Und so auch nicht?
                            PHP-Code:
                            $friends_add mysql_query ("SELECT * from users where MATCH(username) AGAINST ('*".
                            $_POST['search']."*' IN BOOLEAN MODE)") or die ("error"); 

                            Kommentar


                            • #15
                              OK, also jetzt passiert schon was sehr interessantes. Wenn ich zum Beispiel atricio eingebe, wird Patricio auch angezeigt, was wirklich cool ist, aber es wird nicht der Wert DonPatrico angezeigt obwohl atricio wieder da drinnen steckt.

                              Egal was ich mache, irgendwie wird kein Zweiter Wert ausgegeben.

                              Zuletzt geändert von DonPatricio; 11.06.2008, 15:02.

                              Kommentar

                              Lädt...
                              X