Php 如何通过ABS将函数放入订单中(

Php 如何通过ABS将函数放入订单中(,php,sql,arrays,sql-order-by,ranking,Php,Sql,Arrays,Sql Order By,Ranking,目前,我有一个SQL查询,它查找可接受的匹配项,然后使用以下方法对它们进行排序: ABS订单(项目排名-$rating) 是否可以在处理查询时以某种方式修改“项目排名”,以便添加一个表示如下内容的条件: if(category=='$category') 从项目的ABS中减去1 然后通过ABS订购 我不确定这是否是一个对了解正确代码的人的快速回答,或者这是一个更大的概念性的“我如何才能实现这个结果”类型的问题 SELECT * FROM Table ORDER BY CASE Category

目前,我有一个SQL查询,它查找可接受的匹配项,然后使用以下方法对它们进行排序:

ABS订单(项目排名-$rating)

是否可以在处理查询时以某种方式修改“项目排名”,以便添加一个表示如下内容的条件:

if(category=='$category')

从项目的ABS中减去1

然后通过ABS订购

我不确定这是否是一个对了解正确代码的人的快速回答,或者这是一个更大的概念性的“我如何才能实现这个结果”类型的问题

SELECT *
FROM Table
ORDER BY CASE Category 
           WHEN '$category' THEN ABS(ItemRanking - $rating - 1) 
           ELSE ABS(ItemRanking - $rating)
         END
无论哪种方式,有一些上下文都可能是有帮助的。目标是对一堆提交进行排序,以便它们与“评级”值相匹配,但同时也可以提升用户正在寻找的类别中的项目


现实生活中的一个例子(不是我的网站):一个购物网站可以提供一个过滤器,搜索价格方面最接近的匹配项,但其行为就像某个类别(例如“红色”)中的所有项目一样与实际值相比,10美元更接近匹配值。

为什么不使用以下类型的SQL,利用ORDER BY表达式中的CASE语句对结果进行动态排序

这更像是一个面向SQL的解决方案,所以我不确定它是否适用于您的问题

SELECT *
FROM Table
ORDER BY CASE Category 
           WHEN '$category' THEN ABS(ItemRanking - $rating - 1) 
           ELSE ABS(ItemRanking - $rating)
         END

为什么不使用以下类型的SQL,在ORDERBY表达式中使用CASE语句来动态排序结果

这更像是一个面向SQL的解决方案,所以我不确定它是否适用于您的问题

SELECT *
FROM Table
ORDER BY CASE Category 
           WHEN '$category' THEN ABS(ItemRanking - $rating - 1) 
           ELSE ABS(ItemRanking - $rating)
         END
做点像

Select if(category='$category', ABS (itemranking - $rating) - 1, ABS (itemranking - rating)) as calc 
FROM table 
ORDER BY calc
做点像

Select if(category='$category', ABS (itemranking - $rating) - 1, ABS (itemranking - rating)) as calc 
FROM table 
ORDER BY calc

如前所述,在Select查询中使用测试条件是通过使用Case语句完成的。除了已经给出的示例外,其他一些代码示例可以是:

Order By ABS (itemranking - $rating) - 
  Case When category == '$category' Then 1 Else 0 End


另外,您没有提到您是否正在使用MySQL、MS-SQL Server或其他SQL Server。一些能够正确使用MySQL的东西可能无法使用MS-SQL Server,反之亦然。

正如前面提到的,在Select查询中使用测试条件是通过使用Case语句来完成的。除了已经给出的示例之外,还有一些其他的代码示例可以是:

Order By ABS (itemranking - $rating) - 
  Case When category == '$category' Then 1 Else 0 End


另外,您没有提到您是否正在使用MySQL、MS-SQL Server或其他SQL Server。一些能够正确使用MySQL的东西可能无法使用MS-SQL Server,反之亦然。

我想除了在PHP中经常使用的函数之外,我对SQL还不够熟悉,无法确切了解发生了什么。因此,我添加了一个特例似乎功能类似于if语句。我想我丢失的是“else”语句。什么时候设置“ranking”呢?@user187680:我对查询进行了一些修改以简化它。我在ORDER BY子句中使用的CASE语句只不过是if语句的集合,在这种情况下,它取决于每行中的字段(类别和项目排名)和本地PHP变量$category和$rating。从这个CASE语句返回的值是一个可以相对容易地排序的直数。我想我对PHP中经常使用的函数之外的SQL不够熟悉,无法准确理解发生了什么。因此,我添加了一个特殊的CASE,它的功能似乎类似于if语句。I假设我丢失的是“else”语句。“ranking”是什么时候设置的?@user187680:为了简化查询,我对查询做了一些修改。我在ORDER BY子句中使用的CASE语句只不过是IF语句的集合,在这种情况下,它取决于每行中的字段(Category和itemsranking)和本地PHP变量$category和$rating。从这个CASE语句返回的值是一个相对容易排序的直数。