登录  /  注册
Laravel按价格排序,带有特殊价格条件
P粉030479054
P粉030479054 2023-09-22 13:06:46
[MySQL讨论组]

我有一个带有以下列(价格,特价,是否特价)的表。

+-------+------+-----------------+--------------+---------+
| id    | price |  special_price  | is_special   | qty      |
+-------+-------------------------+--------------+----------+
| 1     | 100   |    null         | 0            |  5       |
| 2     | 120   |    99           | 1            |  0       |
| 3     | 300   |    null         | 0            |  1       |
| 4     | 400   |    350          | 1            |  10      |
| 5     | 75    |    69           | 1            |  0       |
| 6     | 145   |    135          | 0            |  1       |
+-------+-------+-----------------+--------------+---------+

我想按照'price'排序获取产品,如果'is_special'列为true,则选择'special_price'列。

我想要以下结果。

+-------+-----------+-----------------+--------------+--------------+
| id    | price     |  special_price  | is_special   | qty          |
+-------+-----------------------------+--------------+--------------+
| 5     | 75        |    69           | 1            |  0           |
| 2     | 120       |    99           | 1            |  0           |
| 1     | 100       |    null         | 0            |  5           |
| 6     | 145       |    135          | 0            |  1           |
| 3     | 300       |    null         | 0            |  1           |
| 4     | 400       |    350          | 1            |  10          |
+-------+-----------+-----------------+--------------+--------------+

在原始SQL中,它看起来像

SELECT *
FROM products
ORDER BY IF(is_special=0, price, special_price ) ASC;

我正在使用Laravel,并希望对查询生成器进行排序并获取结果。

例如,我使用虚拟属性完成了这个操作

/**
 * 获取当前价格
 *
 * @return mixed
 */
 public function getCurrentPriceAttribute()
 {
     return $this->is_special ? $this->special_price : $this->price;
 }

然后对集合进行排序$products->sortBy('current_price'),但这次我想在结果中获取查询生成器。 查询生成器无法使用虚拟属性。

我尝试通过两个列'price'和'qty'进行多重排序

$query = Product::query();

$query->orderByRaw("if(is_special=0, price, special_price) " . request('price', 'ASC'));
$query->orderBy('qty', request('qty', 'DESC'));

$query->get();

我有两个过滤器'数量'和'价格'。

在这个多重排序中,我想按照价格排序产品,然后按照'qty'排序所有产品。 qty == 0的产品需要在qty > 0的所有产品之后。

请帮助我。

P粉030479054
P粉030479054

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 技术文章
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2023 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号

登录PHP中文网,和优秀的人一起学习!
全站2000+教程免费学