sql >> Databasteknik >  >> RDS >> Mysql

Hur man får och beställer de mest relevanta posterna från databasen med flera nyckelord Laravel 5

Okej, kanske någon SQL-trollkarl kan ge dig en bättre SQL-lösning. Men tills dess...

Så här skulle jag göra med Laravel kollektioner (sortera 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. Grundläggande DB-anslutningspool med Java och Tomcat 7

  2. MySQL Connector för C++ | MySQL_Connection::setReadOnly() undantag på setSchema

  3. Tillträde beviljas ej; du behöver (minst en av) SUPER-behörigheterna för denna operation

  4. Installera Postgres.app på en Mac