ठीक है शायद कुछ 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();