sql >> Databáze >  >> RDS >> Mysql

Jak získat a objednat nejrelevantnější záznamy z databáze s více klíčovými slovy Laravel 5

Dobře, možná by vám nějaký SQL kouzelník mohl dát lepší řešení SQL. Ale do té doby...

Takto bych to udělal s Laravel kolekce (třídění pomocí 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. MySQL/SQL:Aktualizace s korelovaným poddotazem ze samotné aktualizované tabulky

  2. Výpočet hodnocení v PHP/MySQL

  3. SQL:NENÍ V alternativě pro výběr řádků na základě hodnot *různých* řádků?

  4. Funkce backendu pro resetování hesla