sql >> Database teknologi >  >> RDS >> Mysql

Sådan får du og bestiller de mest relevante poster fra databasen med flere nøgleord Laravel 5

Okay, måske en SQL-magiker kunne give dig en bedre SQL-løsning. Men indtil da...

Sådan ville jeg gøre det med Laravel kollektioner (sortere med php):

$search_terms = array('York', 'North Yorkshire');

$properties = Property::where(function ($q) use ($search_terms) {
            foreach ($search_terms as $value) {
                $q->orWhere('address1', 'like', "%{$value}%");
                $q->orWhere('address2', 'like', "%{$value}%");
                $q->orWhere('postcode', 'like', "%{$value}%");
                $q->orWhere('city_town', 'like', "%{$value}%");
                $q->orWhere('county', 'like', "%{$value}%");
            }
        })->paginate(25);

$props = ['address1', 'address2', 'postcode', 'city_town', 'county'];

$properties = $properties->sortByDesc(function($i, $k) use ($search_terms, $props) {
    // The bigger the weight, the higher the record
    $weight = 0;
    // Iterate through search terms
    foreach($search_terms as $searchTerm) {
        // Iterate through properties (address1, address2...)
        foreach($props as $prop) { 
            // Use strpos instead of %value% (cause php)
            if(strpos($i->{$prop}, $searchTerm) !== false)
                $weight += 1; // Increase weight if the search term is found
        }
    }

    return $weight;
});

$properties = $properties->values()->all();


  1. Har brug for hjælp til unpivot i mysql med flere datokolonner

  2. Konverter 'datetime offset' til 'date' i SQL Server (T-SQL-eksempler)

  3. mysql fuldtekst MATCH, MOD returnerer 0 resultater

  4. Hvad er meningen med en lagret procedure?