Ankündigung

Einklappen
Keine Ankündigung bisher.

Abfrage mit LIKE und Abfrage mit MATCH???

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Abfrage mit LIKE und Abfrage mit MATCH???

    Hi Leutz & Friends,

    ich habe auf einer Unterseite eine einfache Query stehen, die mittels LIKE ausgeführt wird. Jedoch kommt es vor, dass mittels LIKE nicht immer ein Datensatz angezeigt werden kann. Alternativ, also via if / else möchte ich eine Volltext-Abfrage mittels MATCH laufen lassen. Also immer dann, wenn LIKE nicht greift, soll MATCH greifen.

    Ich habe das mit der Fallunterscheidung if/else probiert funzt aber nicht ganz. Ist mein Vorhaben überhaupt möglich???

    Im Handbuch und der großen Tante konnte ich leider nichts dazu finden.

    Falls mein Vorhaben möglich ist, bin ich Euch für Ansätze die ihr mir geben könnt sehr Dankbar!

    ...schlage mich wieder seit zwei Tagen dumm und dämlich...

    BIG THX 4 HLP


  • #2
    und wir sollen uns jetzt zusätzlich dumm und dämlich raten?

    Bitte konkrete Problemstellung posten!
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      THX @ nikosch für schnelle Antwort

      Problem:
      Ein Mitarbeiter, der z. B. zwei Vornamen hat, sagen wir mal, Hans Michael Müller. Im Betrieb kennt ihn aber jeder Kollege unter Hans. Es kommt also vor, dass nicht nach Hans Michael Müller, sondern nach Hans Müller gesucht wird und er mittels der LIKE Anfrage nicht gefunden werden kann.

      Um dieses Problem zu umgehen habe ich mir überlegt, eine Abfrage mittels MATCH laufen zu lassen, sobald mittels LIKE kein Treffer angezeigt werden kann.

      LIKE-Abfrage:
      PHP-Code:
      $abfrage2 "SELECT * FROM tabelle WHERE Mitarbeiter LIKE '%" mysql_real_escape_string($suchwort) . "%' AND Abteilung LIKE '%" mysql_real_escape_string($abteilung) . "%' ORDER BY ID LIMIT 0,10"
      MATCH-Abfrage:
      PHP-Code:
      $abfrage3 "SELECT * FROM tabelle WHERE MATCH (Mitarbeiter) AGAINST ('%" mysql_real_escape_string($suchwort) . "%') AND MATCH (Abteilung) AGAINST ('%" mysql_real_escape_string($abteilung) . "%') ORDER BY ID LIMIT 0,10"
      Diese beiden Abfragen wollte ich via einer Fallunterscheidung zusammenführen, ist mir aber nicht gelungen. Meine Versuche sind leider nicht mehr vorhanden, da ich diese wieder gelöscht habe. Ein FT-Index für die MATCH-Abfrage ist in meiner MySQL Tabelle vorhanden.

      Ist mein Vorhaben überhaupt möglich?

      Kommentar


      • #4
        Ist die Problemstellung jetzt besser bzw. genauer erklärt???

        Ich frage, weil ich noch keine Antwort bekommen habe

        Kommentar


        • #5
          Und wenn du die Leerzeichen im Suchstring durch die %-Wildcard ersetzen würdest?
          http://hallophp.de

          Kommentar


          • #6
            hej bench78,

            bin selber noch neuling, versuche aber gerne zu helfen.

            eine frage hätte ich mal...wenn du mittels "like" nichts findest, dann wird es mit "match" doch erst recht nicht klappen.

            wie sieht denn genau deine datenbank aus?

            Kommentar


            • #7
              @Asipak & epole
              die %-Wildcard sollten in der Volltext-Abfrage natürlich nicht vorhanden sein.

              Danke für den Hinweis!

              Kommentar


              • #8
                Ein Mitarbeiter, der z. B. zwei Vornamen hat, sagen wir mal, Hans Michael Müller. Im Betrieb kennt ihn aber jeder Kollege unter Hans. Es kommt also vor, dass nicht nach Hans Michael Müller, sondern nach Hans Müller gesucht wird und er mittels der LIKE Anfrage nicht gefunden werden kann.
                Das ist der Grund, warum solche Abfragen normalerweise "Müller, Hans" geführt werden.
                --

                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                --

                Kommentar


                • #9
                  Zitat von Asipak Beitrag anzeigen
                  Und wenn du die Leerzeichen im Suchstring durch die %-Wildcard ersetzen würdest?
                  Suchstring an den Leerzeichen teilen und jedes Wort einzeln mit LIKE abfragen (alle diese Teilabfragen durch AND verbinden)

                  Suche nach: Hans Müller
                  -> SELECT .. FROM ... WHERE name LIKE '%Hans%' AND name LIKE '%Müller%'

                  Nicht sonderlich elegant, auch nicht unbedingt performant, aber sehr treffsicher
                  Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                  Kommentar


                  • #10
                    aber sehr treffsicher
                    Naja.. Trifft dann auch alle Hansis, alle Mönchmüller und Müllermeisters ...
                    --

                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                    --

                    Kommentar


                    • #11
                      Suchstring an den Leerzeichen teilen und jedes Wort einzeln mit LIKE abfragen (alle diese Teilabfragen durch AND verbinden)
                      ...geht das auch, wenn ich nur eine Variable ohne eine weitere (neue) Variable verwnde. Z. B. $suchwort?

                      Ich frage deshalb, weil ich nur 1 Eingabefeld für die Sucheingabe vorhanden habe. Ein zweites Eingabefeld für die Suche ist aus Platzgründen nicht mehr möglich.

                      ...oder anders gefragt: kann ich mit zwei oder mehr Variablen ein Sucheingabefeld bestücken???

                      Kommentar


                      • #12
                        Ist immer die Frage, wie du "einen" Suchbegriff definierst.

                        Du kannst einen String (1 oder mehr Wörter) entweder "as-is" suchen (also als ein kompletter Text) oder auch am Leerzeichen trennen und viele Einzelbegriffe suchen...


                        @nikosch: Eigentlich sollte diese Art der Abfrage nur die finden, bei denen im name Feld sowohl 'Hans' als auch 'Müller' vorkommt. 'Fritz Müller' oder 'Hansi Hinterseher' müssten durchrutschen.
                        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                        Kommentar


                        • #13
                          Code:
                          Du kannst einen String (1 oder mehr Wörter) entweder "as-is" suchen (also als ein kompletter Text) oder auch am Leerzeichen trennen und viele Einzelbegriffe suchen...
                          Wie funktioniert das, dass man einzelne Wörter am Leerzeichen trennen kann und dadurch viele Einzelbegriffe suchen kann. Darüber habe ich mir schon die ganze Zeit Gedanken gemacht, konnte mir aber nicht vorstellen, dass das möglich ist. Tja, bin halt noch ganz frisch wie ihr sieht.

                          Meine Variable habe ich folgendermaßen definiert:

                          PHP-Code:
                          $suchwort = (empty($suchwort) AND isset($_GET['suche'])) ?
                          trim($_GET['suche']) : ''
                          Wie kann ich das Suchwort am Leerzeichen trennen lassen um dadurch mehr Einzelbegriffe zu bezwecken?

                          Kommentar


                          • #14
                            explode()
                            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                            Kommentar


                            • #15
                              explode()
                              THX @ lstegelitz

                              Aber dann erziele ich doch das selbe Ergebnis wie mit der MATCH-Abfrage oder liege ich da falsch?

                              Kommentar

                              Lädt...
                              X