雄辩地按最佳匹配排序

时间:2019-06-13 05:02:19

标签: mysql laravel eloquent

我从雄辩的查询中得到了一些结果,我想按最佳匹配对它们进行排序。我该如何雄辩地做它?

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

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

https://bytutorial.com/blogs/tsql/how-to-order-the-sql-query-result-by-best-match-keyword-search

2 个答案:

答案 0 :(得分:2)

是的,建议您使用orderByRaw(),这样您的查询将被转换为:

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

这里假设表Product的模型名称为products

答案 1 :(得分:0)

我们可以使用原始查询来按最佳匹配顺序进行排序。它给了我最好的比赛结果。

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")

匹配的结果将按以下顺序排序。

  • 首字母大写:与搜索词完全匹配。
  • 第二种情况:以搜索词开头。
  • 第三种情况:在任意位置搜索单词。
  • 第四种情况:以搜索词结尾。
  • 其他情况:搜索词不包含。