Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да получите и поръчате най-подходящите записи от базата данни с множество ключови думи Laravel 5

Добре, може би някой SQL магьосник би могъл да ви даде по-добро SQL решение. Но дотогава...

Ето как бих го направил с колекции на Laravel (сортиране с 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

  2. Извикване на функция-член find() на необект при вмъкване на данни с помощта на PHP mySQL simpleHTMLDOM

  3. Doctrine Query Language получава макс/последен ред на група

  4. Как да скрия съхранената процедура на mysql

  5. SELECT / GROUP BY - последователност от стойност