Mysql 在雄辩的比赛中按最佳匹配排序

Mysql 在雄辩的比赛中按最佳匹配排序,mysql,laravel,eloquent,Mysql,Laravel,Eloquent,我有一些从雄辩的查询中得到的结果,我想按最佳匹配排序。我怎样才能做到这一点在拉威尔雄辩 在这里,我在SQL中找到了一些解决方案,但我无法在雄辩的生成器中使用它 SELECT TOP 5 * FROM Products WHERE ProductCode LIKE '%200%' ORDER BY CHARINDEX('200', ProductCode, 1), ProductCode 如建议的那样,您可以使用orderByRaw(),以便将查询转换为: $r

我有一些从雄辩的查询中得到的结果,我想按最佳匹配排序。我怎样才能做到这一点在拉威尔雄辩

在这里,我在SQL中找到了一些解决方案,但我无法在雄辩的生成器中使用它

    SELECT TOP 5 * 
    FROM Products
    WHERE ProductCode LIKE '%200%'
    ORDER BY CHARINDEX('200', ProductCode, 1), ProductCode

如建议的那样,您可以使用
orderByRaw()
,以便将查询转换为:

$result = Product::where("ProductCode", "LIKE", '%200%')
                ->orderByRaw('CHARINDEX('200', ProductCode, 1) DESC, ProductCode ASC')
                ->get();

这里,假设模型名为
Product
,对于表
products

,我们可以使用原始查询按最佳匹配排序。这给了我最好的比赛结果

DB::select(
    "SELECT *
       FROM  table_name
       WHERE column_name LIKE '%".$search_word."%' 
       ORDER BY
        CASE
        WHEN column_name LIKE '".$search_word."' THEN 1
        WHEN column_name LIKE '".$search_word."%' THEN 2
        WHEN column_name LIKE '%".$search_word."%' THEN 3
        WHEN column_name LIKE '%".$search_word."' THEN 4
        ELSE 5
    END")
匹配的结果将按以下顺序排序

  • 第一种情况:与搜索词完全匹配
  • 第二种情况:以搜索词开头
  • 第三种情况:在任何位置搜索单词
  • 第四种情况:以搜索词结尾
  • 其他情况:搜索词不包含

您可以使用
orderByRaw
它很有帮助。非常感谢。