为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Laravel 中获得最近的行?

如何在 Laravel 中获得最近的行?

PHP
皈依舞 2021-11-13 10:36:49
我有一张带有价格列的表格。现在我想按价格获得最近的行。喜欢:如果我给值 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


查看完整回答
反对 回复 2021-11-13
?
蛊毒传说

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 ;


查看完整回答
反对 回复 2021-11-13
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

你能检查你的代码的结果查询,并将其粘贴到这里吗?

我怀疑问题出在这一行

$suggestions = $suggestions->select('*', DB::raw("ABS(price - $request->price) AS distance"))->orderBy('distance');

where$request->price被视为未替换为您期望的值的字符串。



查看完整回答
反对 回复 2021-11-13
  • 3 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信