sir*_*jay 1 php mysql sorting yii2
我需要在 php mysql 表中按最接近的值进行排序/排序。例如,我有一个包含价格值的表:
10
20
30
40
50
Run Code Online (Sandbox Code Playgroud)
当我搜索37它时必须返回最接近的:
40
30
50
20
10
Run Code Online (Sandbox Code Playgroud)
详细信息:|40-37|=3- 最接近。然后|30-37|=7-下一步。然后|50-37|=13。然后|20-37|=17...所以我们有3, 7, 13, 17....
另外,在 Yii2 上有内置的方法吗?
$query = Prices::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort'=> ['defaultOrder' => ['price' => SORT_DESC]],
]);
Run Code Online (Sandbox Code Playgroud)
在 SQL 级别,您想要做的是按每行距 37 的距离进行排序,例如ORDER BY ABS(value - 37) ASC(请参阅此 SqlFiddle 的示例)。
要在 Yii2 框架中应用它,您应该能够使用上面的表达式来代替排序哈希键的列名:
$query = Prices::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort'=> ['defaultOrder' => ['ABS(price - 37)' => SORT_ASC]],
]);
Run Code Online (Sandbox Code Playgroud)
现在,假设37是一个参数,您需要将其插入到该表达式中。确保对其进行清理(例如,'ABS(price - ' . (int)$yourParam . ')'),否则您将面临 SQL 注入。此外,该'sort'值仅适用于 ActiveDataProvider;它不适用于 ArrayDataProvider。
| 归档时间: |
|
| 查看次数: |
1451 次 |
| 最近记录: |