Mijn zoekopdracht werkt, maar als er veel woorden worden gebruikt, worden er veel niet-gerelateerde dingen geretourneerd

Mijn zoekopdracht werkt, maar als er veel woorden worden gebruikt, worden er veel niet-gerelateerde dingen geretourneerd. Alle ideeën over hoe de zoekopdracht te repareren tot waar lange zinnen worden doorzocht, zullen een kleiner resultaat opleveren en niet meer dingen. deze functie Ik denk dat ik elk zoekwoord voor elke afzonderlijke artikeltitel zoek en ik weet niet zeker of er iets mis mee is

function search_results($search_for) {
$returned_results = array();
$where = "";

$search_for = preg_split('/[\s]+/', $search_for);
$total_search_words = count($search_for);

foreach($search_for as $key=>$search_term) {
    $where .= "`review_title` LIKE '%$search_term%'";

    if($key != ($total_search_words - 1)) {
        $where .= " OR ";
    }
}
$value = $_POST['search_value'];
$results = "SELECT * FROM `reviews` WHERE `review_referral` = '$value' AND $where";
$results_num = ($results = mysql_query($results)) ? mysql_num_rows($results) : 0;

if($results_num === 0) {
    return false;
} else {

    while($results_row = mysql_fetch_assoc($results)) {
        $returned_results[] = array(
                            'review_title' => $results_row['review_title'],
                            'review_body' => $results_row['review_body'],
                            'user_id' => $results_row['user_id'],
                            'user_firstname' => $results_row['user_firstname'],
                            'user_lastname' => $results_row['user_lastname'],
                            'review_id' => $results_row['review_id'],
                            'review_body' => $results_row['review_body'],
                            'review_referral' => $results_row['review_referral'],
                            'rating' => $results_row['rating'],
                            'review_date' => $results_row['review_date'],
                            'review_category' => $results_row['review_category'],
                            'review_url' => $results_row['review_url'],
                            'referral_category' => $results_row['referral_category'],
        );

    }

return $returned_results;
0

1 antwoord

Als u zoekopdrachten wilt beperken, moet u AND gebruiken in plaats van OR.

if($key != ($total_search_words - 1)) {
    $where .= " AND ";
}
0
toegevoegd
Als u wilt dat de zoekopdracht wordt uitgevoerd, worden alle mogelijke variaties geretourneerd, maar worden de relevante resultaten bovenaan weergegeven. U kunt uw resultaten rangschikken om de resultaten met AND-overeenkomsten boven aan de resultaten te tonen of specifieke velden in de database gebruiken als meer relevant (zoals zoektermen in het veld review_title die belangrijker zijn dan in de review_body). Wanneer u een dergelijke aangepaste zoekopdracht schrijft, kunt u als u de tabellen goed kent, eenvoudig de beste resultaten behalen - bovenaan in de lijst - zodat uw zoekterm over het algemeen beter wordt.
toegevoegd de auteur Fluffeh, de bron