Suchabfrage

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

  • Suchabfrage

    Wie muss eine Suchabfrage aussehen wenn man mehrere Spalten abfragen will?

    Mein jetztiger code sieht so aus:
    PHP-Code:
    $res =mysql_query("SELECT * FROM osg_projekt WHERE title,
    species, region, country, locality, methode, project
    LIKE '%
    $search%'")or die(mysql_error()); 
    Als Fehlermeldung bekomme ich diese:
    You have an error in your SQL syntax near ' species, region, country, locality, methode, project LIKE '%Habitat%'' at line 1

    So eine Suchabfrage habe ich bis jetzt noch nicht programmiert.
    *winks*
    Gilbert
    ------------------------------------------------
    Hilfe für eine Vielzahl von Problemen!!!
    http://www.1st-rootserver.de/

  • #2
    spalte1 like '%foo%' AND (oder OR) spalte2 like '%foo%'

    Was AND und OR bedeuten dürfte klar sein.
    [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
    [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
    [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

    © Harald Schmidt

    Kommentar


    • #3
      Wie kann ich jetzt die Suchabfrage so ausbauen das ich auch nach zwei oder mehreren Wörtern suchen kann?
      *winks*
      Gilbert
      ------------------------------------------------
      Hilfe für eine Vielzahl von Problemen!!!
      http://www.1st-rootserver.de/

      Kommentar


      • #4
        Das ganze wird interessanter, wenn in mehreren Feldern, nach mehreren Wörtern gesucht wird, die durch UND oder ODER verbunden sind ;-)

        hier mal ein Auszug aus einem solchen Script (ich hoffe es hilft):

        $search_pos ist ein Array mit den Feldnamen der DB, in denen gesucht werden soll

        $wordstring und $recursive bilden in $query_list die DB-Anfrage.

        PHP-Code:
        foreach ($search_pos as $key => $position) {
                if (!
        $first1) {
                    
        $wordstring .= " OR (";
                } else {
                    
        $wordstring .= "(";
                }
                
        $first1 false;
                
        $first2 true;
                foreach (
        $word_list as $key2 => $word) {
                    if (!
        $first2) {
                        
        $wordstring .= $method ($position LIKE '%$word%')";
                    } else {
                        
        $wordstring .= "($position LIKE '%$word%')";
                    }
                    
        $first2 false;
                }
                
        $wordstring .= ")";
            }


        $recursive "(";
                        
        $first_element true;
                    foreach (
        $cattree as $value) {
                           
        $id $value["id"];
                        if ( !
        $first_element ) {
                            
        $recursive .= " OR ";
                        }
                        
        $recursive .= "(category = \"$id\")";
                        
        $first_element false;
                    }
                    
        $recursive .= ") AND ($wordstring) AND (display = '1')";

        $condition $recursive;

        $query_list "SELECT * FROM ".select_rel("products")." WHERE $condition ORDER BY flag_special DESC, $sort $order LIMIT $start,$cfg_max_products"
        $sort ist das Feld, nach dem sortiert wird,
        $oder ist ASC oder DESC,
        $start ist der Offset,
        $cfg_max_products ist die max. Anzahl

        Grüße,

        Felix
        Hello World

        Kommentar


        • #5
          Hi!
          Wenn Du beide Wörter finden willst, machst Du das so:

          $res_=mysql_query("SELECT_*_FROM_osg_projekt_WHERE_title,
          species LIKE_'%$search%' ||_region LIKE_'%$search%'_|| country LIKE_'%$search%' ||_locality LIKE_'%$search%'_|| methode LIKE_'%$search%'_|| project LIKE_'%$search%' && species LIKE_'%$search2%' ||_region LIKE_'%$search2%'_|| country LIKE_'%$search2%' ||_locality LIKE_'%$search2%'_|| methode LIKE_'%$search2%'_|| project LIKE_'%$search2%'")or_die(mysql_error());

          Wenn es ausreicht eins von den Wörtern zu finden, kannst Du das auch so machen:

          $res_=mysql_query("SELECT_*_FROM_osg_projekt_WHERE_title,
          species LIKE_'%$search%' ||_region LIKE_'%$search%'_|| country LIKE_'%$search%' ||_locality LIKE_'%$search%'_|| methode LIKE_'%$search%'_|| project LIKE_'%$search%' || species LIKE_'%$search2%' ||_region LIKE_'%$search2%'_|| country LIKE_'%$search2%' ||_locality LIKE_'%$search2%'_|| methode LIKE_'%$search2%'_|| project LIKE_'%$search2%'")or_die(mysql_error());

          cu tj99de
          Of all things I've lost
          I miss my mind the most

          Kommentar


          • #6
            Wie kann ich das aber so dymamisch machen das ich nicht nur ein oder zwei Wörter finden sondern auch mehrere? Der User soll ja nicht nur geschränkt sein auf zwei Wörter. Mit der Kombination von AND OR.
            Zuletzt geändert von Wotan; 17.07.2002, 12:46.
            *winks*
            Gilbert
            ------------------------------------------------
            Hilfe für eine Vielzahl von Problemen!!!
            http://www.1st-rootserver.de/

            Kommentar


            • #7
              kommen die suchbegriffe in einer oder meheren vars an?
              h.a.n.d.
              Schmalle

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



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

              Kommentar


              • #8
                Eien var $search
                *winks*
                Gilbert
                ------------------------------------------------
                Hilfe für eine Vielzahl von Problemen!!!
                http://www.1st-rootserver.de/

                Kommentar


                • #9
                  Wenn Du das wirklich dynamisch machen willst, kommen die Suchworte wahrscheinlich als ein string an, den splittest Du einfach nach jedem " " und baust dann mit Hilfe einer Schleife so einen WHERE-Ausdruck auf, wie ich das oben gemacht hab.
                  Der WHERE-Ausdruck ist im Prinzip ganz einfach, Du überprüfst alle in Frage kommenden Spalten auf vorkommen einer bestimmten Zeichenkette und verknüpfst die einzelnen Spalten untereinander mit oder.
                  Wenn Du mehrere Wörter suchen willst, dann machst Du das oben beschriebene für jedes Wort und verbindest die einzelnen Ausdrücke mit:
                  oder (wenn es reicht ein Wort zu finden)
                  und (wenn alle Worte gefunden werden sollen)

                  cu tj99de
                  Of all things I've lost
                  I miss my mind the most

                  Kommentar


                  • #10
                    Das mit dem Zerlegen ist mir noch nicht ganz klar. Aber den Rest werde ich mal probieren.
                    *winks*
                    Gilbert
                    ------------------------------------------------
                    Hilfe für eine Vielzahl von Problemen!!!
                    http://www.1st-rootserver.de/

                    Kommentar


                    • #11
                      $zerleg = explode(" ", $search);
                      $all = count($zerleg)-1;

                      $i = 0; while($i <= $all) {
                      echo "$zerleg[$i] <br> ";
                      $i++;
                      }

                      // nur n beispiel
                      h.a.n.d.
                      Schmalle

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



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

                      Kommentar


                      • #12
                        $zerleg = explode(" ", $search);
                        $all = count($zerleg)-1; // Wieso -1?

                        $i = 0; while($i <= $all) {
                        echo "$zerleg[$i] <br> ";
                        $i++;
                        }
                        *winks*
                        Gilbert
                        ------------------------------------------------
                        Hilfe für eine Vielzahl von Problemen!!!
                        http://www.1st-rootserver.de/

                        Kommentar


                        • #13
                          Wenn Du nur bis zum vorletzten zählst, kannst Du ne Schleife für die WHERE-Bedingung bauen.
                          So etwa:

                          for ($i=0; $i<$all; $i++)
                          {
                          $bedingung = //hier Bedingung für ein Wort bauen
                          $where .= $bedingung." || ";
                          }
                          $bedingung = //hier Bedingung für ein Wort bauen
                          $where .= $bedingung;
                          Of all things I've lost
                          I miss my mind the most

                          Kommentar


                          • #14
                            weil es sonst einer zuviel ist
                            h.a.n.d.
                            Schmalle

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



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

                            Kommentar


                            • #15
                              Guckst du hier !
                              PS: Suchfunktion hier im Forum benutzen !
                              [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
                              [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
                              [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

                              © Harald Schmidt

                              Kommentar

                              Lädt...
                              X