Mysql 在雄辩的比赛中按最佳匹配排序
我有一些从雄辩的查询中得到的结果,我想按最佳匹配排序。我怎样才能做到这一点在拉威尔雄辩 在这里,我在SQL中找到了一些解决方案,但我无法在雄辩的生成器中使用它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
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
它很有帮助。非常感谢。