Problem mit suchabfrage

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

  • Problem mit suchabfrage

    Ich habe eine relativ einfache suchabfrage für eine stockfotowebsite. Das Problem ist, dass nicht so wie gewünscht vollständige Begriffe gesucht werden sondern auch Einzelbuchstaben! Wenn ich zB a eingebe, bekomme ich im Ergebnis alle Fotos wo in der Verschlagwortung irgendwo ein a vorkommt.

    Der Code:

    PHP-Code:
    # START SEARCH FUNCTIONALITY
        
        $my_search = strtolower($my_search);
        
        
        $my_search_words = split(" ",$my_search);
        $words = count($my_search_words);
        
        for($z = 0; $z < $words; $z++){
            if(strlen($my_search_words[$z]) >= 1){
                $my_search_words2 = $my_search_words2 . "," . strtolower($my_search_words[$z]);
                //$my_search_words2 = "," . $my_search_words2;
            }
        }
        
        $my_search_words2 = split(",",$my_search_words2);
        $words2 = count($my_search_words2);
        
        
        //echo $words2;
        //exit;
        //$my_search = "t";
        if($match_type == "id"){
            $searcher = "SELECT * FROM photo_package where active = '1' and gallery_id IN ($approved_cats) and id = '" . $_POST['search'] . "'";
        }
     if($match_type != "id"){
        if($words2 < 2){
            $searcher = "SELECT * FROM photo_package where active = '1' and gallery_id IN ($approved_cats) and keywords like '%$my_search%'";
        } else {
            $searcher = "SELECT * FROM photo_package where active = '1' and gallery_id IN ($approved_cats) and (";
            for($z2 = 1; $z2 < $words2; $z2++){
                $searcher.= " keywords like '%" . $my_search_words2[$z2] . "%'";
                if($z2 < ($words2 - 1)){
                    if($match_type == "any"){
                        $searcher.= " or ";
                    }
                    if($match_type == "all"){
                        $searcher.= " and ";
                    }
                }
            }
            if($words2 > 0){
                $searcher.= " or";
            }
            for($z3 = 1; $z3 < $words2; $z3++){
                $searcher.= " title like '%" . $my_search_words2[$z3] . "%'";
                if($z3 < ($words2 - 1)){
                    if($match_type == "any"){
                        $searcher.= " or ";
                    }
                    if($match_type == "all"){
                        $searcher.= " and ";
                    }
                }
            }
        }
        //$searcher.= "keywords like '% $my_search %' ";
        $searcher.= ") order by 'cart_count' desc LIMIT 350";
    }
        //echo $words2;
        //echo "<br /><br />";
        //echo $searcher;
        //exit;
        
        //echo $searcher;
        //exit;
        $package_result = mysql_query($searcher, $db);
        $package_rows = mysql_num_rows($package_result);
        
        //echo "<br /><br />" . $package_rows;
        //exit;
        while($package = mysql_fetch_object($package_result)){

            $photo_result = mysql_query("SELECT * FROM uploaded_images where reference = 'photo_package' and reference_id = '$package->id'", $db);
            $photo_rows = mysql_num_rows($photo_result);
            $photo = mysql_fetch_object($photo_result);

                
                if($templine < $perpage and $line < $package_rows) {
                    if($line == $recordnum) {
                        $line++;
                        $templine++;
        ?>
                    <?
                        if($photocount == 1){
                    ?>
                    </tr><tr>
                    <?
                        } else {
                    ?>
                    
                    <?
                        }
                    ?>
    Kann mir jemand mit diesen Angaben weiterhelfen?

  • #2
    mach zwei leerzeichen rein am anfang und ende im sql oder benutz die volltextsuche
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      danke für die ausführliche, schlaue Antwort
      Genau das hab ich auch selbst schon probiert, bringt aber leider nichts. Und die Suche wirft in dieser Hinsicht nichts brauchbares aus..

      das Problem ist, wenn ich die Leerzeichen mache kommen überhaupt keine Suchergebnisse mehr.

      Das Feld "Keywords", dass durchsucht werden soll enthält viele Begriffe, die mit Komma oder Strichpunkt voneinander getrennt sind. Ich will, dass er alle vollständigen Wörter zwischen Komma bzw. Strichpunkt sucht, nicht aber die einzelnen Buchstaben

      Kommentar


      • #4
        Original geschrieben von spherio
        danke für die ausführliche, schlaue Antwort
        Danke für's nicht-Posten-wie-ein-$%&!, sondern für's alle-relevanten-Informationen-gleich-von-Anfang-an-liefern.
        Das Feld "Keywords", dass durchsucht werden soll enthält viele Begriffe, die mit Komma oder Strichpunkt voneinander getrennt sind.
        Ach, sieh mal an - und das hieltst du natürlich nicht im Geringsten für erwähnenswert, weil du denkst vernünftig Normalisieren tut von den anderen auch keiner, also ist so ein Aufbau natürlich selbstverständlich.

        Und nicht nur nicht Normalisiert, sondern auch noch Komma "oder" Strichpunkt - wie zum Geier kommt denn bitte so eine besch... eidene Datenstruktur zustande?
        Ich will, dass er alle vollständigen Wörter zwischen Komma bzw. Strichpunkt sucht, nicht aber die einzelnen Buchstaben
        Wenn du bei diesem Datenmodell bleiben willst (...) - dann sorge erst mal dafür, dass es entweder Komma oder Strichpunkt ist, dann kann man darin vielleicht ein bisschen vernünftiger suchen.
        Auf die Idee, statt Leerzeichen davor und dahinter dann jeweils das tatsächliche Trennzeichen zu setzen, hättest du dann zwar eigentlich auch selbst kommen können ... aber vielleicht informierst du dich dann auch gleich mal, was man mit FIND_IN_SET Feines machen kann.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          ...und das nächste konstruktive posting..

          Ich habe die Datenstruktur nicht selbst entworfen, sondern muss sie nur editieren - deswegen hab ich auch Probleme.

          Danke trotzdem für die letzten 3 Zeilen...die haben schließlich doch noch geholfen

          das mit find_in_set hab ich zwar nicht unmittelbar rausgefunden aber vielleicht hat ja jemand noch den nerv mir auch das zu verraten

          nix für ungut..

          Kommentar


          • #6
            Original geschrieben von spherio
            ...und das nächste konstruktive posting..
            So konstruktiv, wie bei der "Qualität" deiner Problembeschreibung und deiner Reaktion auf die erste, durchaus (im Rahmen des Möglichen) schlaue Antwort, möglich.
            das mit find_in_set hab ich zwar nicht unmittelbar rausgefunden aber vielleicht hat ja jemand noch den nerv mir auch das zu verraten
            Klar doch, bitteschön:
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar

            Lädt...
            X