Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak uzyskać i uporządkować najtrafniejsze wpisy z bazy danych z wieloma słowami kluczowymi Laravel 5

Ok, może jakiś magik SQL mógłby dać ci lepsze rozwiązanie SQL. Ale do tego czasu...

Tak zrobiłbym to z Laravel kolekcje (sortowanie za 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL:Zaktualizuj pole za pomocą połączenia wielu pól

  2. Niestandardowe funkcje DQL w doktrynie2

  3. Jak całkowicie usunąć MySQL 5.7 z systemu Windows?

  4. Zdalnie połącz się z MySQL za pomocą Pythona mysql.connector

  5. Schemat DB dla czatów?