我从雄辩的查询中得到了一些结果,我想按最佳匹配对它们进行排序。我该如何雄辩地做它?
在这里我找到了一些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
答案 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")
匹配的结果将按以下顺序排序。