Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách lấy và sắp xếp các mục nhập phù hợp nhất từ ​​cơ sở dữ liệu với nhiều từ khóa Laravel 5

Được rồi, có lẽ một nhà ảo thuật SQL nào đó có thể cung cấp cho bạn một giải pháp SQL tốt hơn. Nhưng cho đến lúc đó ...

Đây là cách tôi thực hiện với Laravel bộ sưu tập (sắp xếp bằng 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. Cách trả về bảng từ hàm MySQL

  2. Làm cách nào để bắt đầu tăng tự động từ một điểm cụ thể?

  3. MySQL Short Circuit có hàm IF () không?

  4. Truy vấn MySQL - nối 3 bảng với nhau, nhóm theo một cột và đếm cho 2 bảng còn lại

  5. Mysql không khởi động trong vùng chứa docker trên MacOS sau khi cập nhật docker