Like

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

  • Like

    Folgendes Problem:

    ich sende einen Query zur Datenbank

    PHP-Code:
    $search $_POST["var"];   // * oder was anderes

    if ($search == "*") {
        
    $search "%";
    }

    $sql "SELECT * FROM tabelle WHERE field LIKE '$search'";
    $result mysql_query($sql,$conn);

    // ... 
    soweit so gut ... funktioniert auch ...

    wenn aber nun eine Zeile in der DB unter "field" den String "hula" und eine andere den String "hulab" enthaelt werden beide rausgeholt (wenn $search = "hula") ... es soll aber nur der explizit angegebene rausgeholt werden ...
    Wie kriegt man das hin das nur das rausgeholt wird was genau angegeben wurde? Gleichzeitig muss man natuerlich die moeglichkeit behalten, dass bein Eingabe von "*" ALLE Eintraege rausgeholt werden.

  • #2
    PHP-Code:
    $search $_POST["var"];   // * oder was anderes

    if ($search == "*")
        
    $search "LIKE '%'";
    else
        
    $search="= '$search'";   

    $sql "SELECT * FROM tabelle WHERE field $search";
    $result mysql_query($sql,$conn);

    // ... 
    so?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Naja, so wuerde es gehen ... aber ich hatte schon eine aehnliche Loesung und wollte mal wissen ob jemand ne Moeglichkeit kennt, diese Abfrage ohne Zusammensetzen (durch if Bedingungen) des query-Strings zu realiseren.

      Kommentar


      • #4
        wie soll das denn gehen?
        du willst prüfen , ob das drin ist oder nicht? ohne IF ????

        du kannst das if höchstens kürzer schreiben.
        das wars aber schon.

        PHP-Code:
        $search = ($_POST["var"]=="*") ? "LIKE '%'" "= '$search'";   

        $sql "SELECT * FROM tabelle WHERE field $search";
        $result mysql_query($sql,$conn);

        // ... 
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Ne Abraxas ... ich suche etwas was wie "=" funktioniert und gleichzeitig das "%" unterstuetzt ...

          PHP-Code:
          $search $_POST["var"];   // * oder was anderes

          if ($search == "*") {
              
          $search "%";
          }

          $sql "SELECT * FROM tabelle WHERE field = '$search'";
          $result mysql_query($sql,$conn);

          // ... 
          wuerde nicht funktionieren ... da wenn "var" = "*" ist, gar nix aus der Datenbank geholt wird ... obwohl dabei alles rausgeholt werden soll, egal was in der Spalte "field" steht.

          LIKE behandelt das Prozentzeichen als Wildcard ... es wird also alles raugeholt ... jedoch sucht man nach "ABC" und es befindet sich auch ein "ABCD" in der DB werden beide rausgeholt ... und nun wollte ich nur wissen ob man LIKE irgendeine Anweisung mitgeben kann, das es nur nach GENAU dem uebergebenen String sucht ...

          vielleicht ist es jetzt ja deutlicher geworden

          Kommentar


          • #6
            meinst du sowas ?

            PHP-Code:
            $sql "..... WHERE ... LIKE '%".$search."%'"
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              Hmm ne das ist es glaube ich auch nicht.

              Ich habe ein Formular welches Suchkritierien fuer eine Datenbank vorgibt.

              PHP-Code:
              echo "<select name=search>";
              echo 
              "<option selected>*</option>";
              echo 
              "<option>Serie1</option>";
              echo 
              "<option>Serie2</option>";
              echo 
              "<option>Serie</option>"
              Wenn nun der Stern ausgewaehlt wird sollen alle Eintrage aus der DB entnommen werden. Das mache ich indem ich den Stern in das Wildcard Zeichen % umwandle. Dann kann man mit LIKE das wunderbar machen.
              Aber nun kommt das Problem: ich waehle den vierten Punkt "Serie" aus ... LIKE wuerde nun aber auch alle Reihen aus der DB auslesen wo der string "Serie" drin vorkommt (also alle Spalten in denen "Serie1" oder "Serie2" steht).
              Mit dem Vergleichsoperator "=" erzwingt man zwar das der string genau identisch sein muss ... dieser aber akzeptiert kein Wildcard Zeichen ...

              Und nun suche ich nach einer Moeglichkeit LIKE anzuweisen nach haargenau dem gleichen String zu suchen ... oder halt alles zurueckzugeben wenn der Stern -> % als Suchkriterium eingegeben wurde ...

              aber scheinbar scheint es dafuer keine Loesung zu geben ...
              Zuletzt geändert von BlobBanana; 27.01.2003, 16:02.

              Kommentar


              • #8
                dann ist es doch das was du schon hast, oder?
                PHP-Code:
                if ($search == "*") {
                    
                $search "%";
                }

                // oder die kurze if-form
                $search = ($search=="*") ? "%" $search
                du kannst aber auch das machen.

                PHP-Code:
                $search_q = ($search=="*") ? "" " AND field = '".$search."'";
                $sql "SELECT .... WHERE ..... ".$search_q
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  Original geschrieben von Abraxax
                  dann ist es doch das was du schon hast, oder?
                  PHP-Code:
                  if ($search == "*") {
                      
                  $search "%";
                  }

                  // oder die kurze if-form
                  $search = ($search=="*") ? "%" $search
                  irgendwie drehen wir beide uns hier gerade im Kreis
                  Das funktioniert nicht richtig ... denn wenn $search = "abc" ist und folgende Eintraege in der DB sind:
                  1. abc
                  2. abcd
                  3. ddddabc
                  4. joabcjo
                  alle rausholen obwohl er nur den ersten Eintrag ("abc") holen soll ... da LIKE einfach nur nach dem String $search in den Zeichenketten aus der DB sucht.

                  Naja die obere Loesung von dir ist schon ganz ok ... thnx

                  Oder es weiss jetzt doch noch jemand ob LIKE auch wie "=" funktionieren kann

                  Kommentar


                  • #10
                    wenn man bei like die % weglässt, ist ja quasi =

                    EDIT:
                    welche der lösungen meinst du?
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #11
                      diese meinte ich:

                      PHP-Code:
                      $search = ($_POST["var"]=="*") ? "LIKE '%'" "= '$search'";   

                      $sql "SELECT * FROM tabelle WHERE field $search";
                      $result mysql_query($sql,$conn);

                      // ... 
                      Und LIKE ist eben nicht wie "=" ... das gibt halt auch die Eintraege der DB zurueck in denen der gesuchte String zum Teil drin ist ...

                      z.b. wenn man " ... WHERE field LIKE 'sch' ... " macht, wuerde man auch Felder wo sowas wie "schule", "schoen" oder "asche" zurueckliefern ...

                      Kommentar


                      • #12
                        Original geschrieben von BlobBanana
                        Und LIKE ist eben nicht wie "=" ... das gibt halt auch die Eintraege der DB zurueck in denen der gesuchte String zum Teil drin ist ...
                        aber nur, wenn der suchtext in % eingeschlossen ist. also '%abc%' liefert sdfdfabcjdhfjdhfj aber 'abc' liefert das nicht. dafür sind ja die wildcards % da.

                        in dem beispiel oben habe ich bewusst das LIKE '%' ausgelassen. der WHERE vergleich kostest nur performance und liefert eh alles
                        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                        Kommentar


                        • #13
                          Nee eben nicht ... davon rede ich ja die ganze Zeit ...

                          Habs mit dem String "dc" getestet ... der lieferte mir bei LIKE "dc" und "dcd" zurueck ...

                          Kommentar


                          • #14
                            Original geschrieben von BlobBanana
                            Habs mit dem String "dc" getestet ... der lieferte mir bei LIKE "dc" und "dcd" zurueck ...
                            mhm. schon komisch würde ich sagen. normalerweise sollte er es nämlich so machen, wie ich es sagte. zumindest kenne ich es nicht anders.
                            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                            Kommentar


                            • #15
                              Tjoa ... die Testversuche eben sagen mir aber leider was anderes ...

                              Kommentar

                              Lädt...
                              X