我有一张带有价格列的表格。现在我想按价格获得最近的行。喜欢:如果我给值 1000 需要返回 3,5,6 没有。行。,如果我给值 100 需要返回 1,2 没有。排打包表演示id - name - provider_id - price - others_field1 - name - 1 - 102 - name - 1 - 1203 - name - 1 - 6004 - name - 1 - 3205 - name - 1 - 10006 - name - 1 - 1020我通过搜索谷歌尝试了以下方式。但它不能正常工作。$suggestions = new Pack; $suggestions = $suggestions->where('status', 1); $suggestions = $suggestions->where('provider_id', $request->provider_id); $suggestions = $suggestions->select('*', DB::raw("ABS(price - $request->price) AS distance"))->orderBy('distance'); $suggestions = $suggestions->take(3); $suggestions = $suggestions->get(); $curent = '';$suggestion_lower = '';$suggestion_higher = '';foreach ($suggestions as $value) { if ( $request->price == $value->price ) { $curent = $value; } if ( $request->price > $value->price ) { $suggestion_lower = $value; } if ( $request->price < $value->price ) { $suggestion_higher = $value; }}$suggestions = [ 'curent' => $curent, 'suggestion_higher' => $suggestion_higher, 'suggestion_lower' => $suggestion_lower,];
3 回答
慕莱坞森
TA贡献1810条经验 获得超4个赞
获取类似于 $price 的最大价格:
SELECT * FROM tab WHERE val <= $price ORDER BY val DESC LIMIT 3
获取类似于 $val 的最小价格:
SELECT * FROM tab WHERE val >= $price ORDER BY val LIMIT 3
在任一方向获取与 $price 相似的最接近价格:
SELECT * FROM tab ORDER BY abs(val - $val) LIMIT 3
蛊毒传说
TA贡献1895条经验 获得超3个赞
试试这个查询。您将从数据库中获得近 5 条记录
SELECT *
FROM
( ( SELECT *
FROM pack
WHERE price <= 1000
ORDER BY price DESC
LIMIT 3
)
UNION ALL
( SELECT *
FROM pack
WHERE price > 1000
ORDER BY price ASC
LIMIT 3
)
) AS tmp
ORDER BY price
LIMIT 5 ;
30秒到达战场
TA贡献1828条经验 获得超6个赞
你能检查你的代码的结果查询,并将其粘贴到这里吗?
我怀疑问题出在这一行
$suggestions = $suggestions->select('*', DB::raw("ABS(price - $request->price) AS distance"))->orderBy('distance');
where$request->price
被视为未替换为您期望的值的字符串。
- 3 回答
- 0 关注
- 115 浏览
添加回答
举报
0/150
提交
取消