Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为最大两个变量排序mysql表_Php_Mysql_Sql Order By_Max - Fatal编程技术网

Php 为最大两个变量排序mysql表

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”列,我有以下条目:

     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语句也可以工作