Php 为最大两个变量排序mysql表
希望有人能帮我解决这个问题 我有一个有两列的表,我想从该表中选择项目,并根据这两个值中哪个更高对它们进行排序 假设我有“x”和“y”列,我有以下条目:Php 为最大两个变量排序mysql表,php,mysql,sql-order-by,max,Php,Mysql,Sql Order By,Max,希望有人能帮我解决这个问题 我有一个有两列的表,我想从该表中选择项目,并根据这两个值中哪个更高对它们进行排序 假设我有“x”和“y”列,我有以下条目: x ; y 1.- 10 ; 12 2.- 5 ; 10 3.- 11 ; 20 我希望回复是有序的:3,1,2 我知道这不会有什么帮助,因为它在mysql中没有意义,但它代表了我的想法 $query = (mysql_query("SELECT * FROM productos ORDER BY MAX(x, y)")); 我
x ; y
1.- 10 ; 12
2.- 5 ; 10
3.- 11 ; 20
我希望回复是有序的:3,1,2
我知道这不会有什么帮助,因为它在mysql中没有意义,但它代表了我的想法
$query = (mysql_query("SELECT * FROM productos ORDER BY MAX(x, y)"));
我不想为此查询在表中创建新变量
有什么想法吗?非常感谢您想在x或y之后排序,这取决于哪个更高
Select
*
from
products
order by
Case when x>y then x else y end DESC
SELECT * FROM products ORDER BY GREATEST(x, y)
但在你的例子中,这是3,2,1,因为15(y)比-5(x)高,也比第1行中的最大值高。所以我有点困惑
支持空值和正确顺序:
SELECT * FROM products ORDER BY GREATEST(COALESCE(x, 0), COALESCE(y, 0)) DESC
如果需要默认值而不是0
,只需替换它即可
SELECT *
FROM products
ORDER BY GREATEST(x,y) DESC
, LEAST(x,y) DESC
排序的第二部分(最少)是将带有(12,20)
的行放在带有(10,20)
的行之前
由于这两个字段可以有
NULL
:
SELECT *
FROM products
ORDER BY GREATEST( COALESCE(x,0), COALESCE(y,0) ) DESC
, LEAST( COALESCE(x,0), COALESCE(y,0) ) DESC ;
您的示例数据与预期的排序顺序不匹配请尝试使用IF(expr1、expr2、expr3)控制流函数。据我所知,您的示例应返回3、2、1sry,键入错误。。。我刚刚编辑了一下,当你修正了你的打字错误时,结果应该是3,1,2。@Zollway:
按最大(x,y)描述排序
当我在列的soem上有一个空值时,这个方法不起作用。。。它的工作方式有点不可预测。无论如何,我只需更改0的空值。工作完美,thanks@Dan:你没有提到你在列中有NULL
s。你说得对,我的错。无论如何,这是一个好主意,因为为0更改null非常容易,而且它可以工作。我是SQLServer开发人员,我们没有grest()
,但是case语句也可以工作