Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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 - Fatal编程技术网

php mysql按获取的顺序对结果进行排序

php mysql按获取的顺序对结果进行排序,php,mysql,Php,Mysql,在使用in语句时,如何按照数组中ID的顺序对得到的结果排序: 从id所在的表中选择id、名称(23、33、55、2) 我想得到: +----+---------+ | id | name | +----+---------+ | 23 | name1 | | 33 | name2 | | 55 | name3 | | 2 | name4 | +----+---------+ 按此顺序您可以尝试以下方法: SELECT t.id,t.name from (se

在使用in语句时,如何按照数组中ID的顺序对得到的结果排序:


从id所在的表中选择id、名称(23、33、55、2)

我想得到:

+----+---------+
| id | name    |
+----+---------+
| 23 | name1   |
| 33 | name2   |
| 55 | name3   |
|  2 | name4   |
+----+---------+

按此顺序

您可以尝试以下方法:

SELECT t.id,t.name 
from 
    (select 23 as id,1 as rnk union all 
     select 33 as id,2 union all
     select 55 as id,3 union all
     select 2 as id,4 )input
join table t 
on   t.id=input.id
order by input.rnk

您可以尝试以下方法:

SELECT t.id,t.name 
from 
    (select 23 as id,1 as rnk union all 
     select 33 as id,2 union all
     select 55 as id,3 union all
     select 2 as id,4 )input
join table t 
on   t.id=input.id
order by input.rnk

SELECT id,name from table WHERE id IN(23,33,55,2)ORDER BY id=23 DESC,id=33 DESC,id=55 DESC,id=2 DESC
不是特定于数据库的解决方案,但仍然有效

SELECT id,name from table WHERE id IN(23,33,55,2)ORDER BY id=23 DESC,id=33 DESC,id=55 DESC,id=2 DESC
不是特定于数据库的解决方案,但仍然有效

您可以尝试使用联接。不能保证按此顺序返回,但对于MySQL来说,这在大多数情况下都是正确的:

SELECT table.id, table.name
FROM ( 
  SELECT 23 id UNION SELECT 33 id UNION SELECT 55 id UNION SELECT 2
) a
JOIN table
ON a.id = table.id

您的订单是如何确定的?如果您可以提供排序功能,它就会变得简单。

您可以尝试使用联接。不能保证按此顺序返回,但对于MySQL来说,这在大多数情况下都是正确的:

SELECT table.id, table.name
FROM ( 
  SELECT 23 id UNION SELECT 33 id UNION SELECT 55 id UNION SELECT 2
) a
JOIN table
ON a.id = table.id

您的订单是如何确定的?如果您可以提供排序功能,它会变得很简单。

从表中按字段(id,2,23,33,55)顺序选择id,名称(id,23,33,55)

从表中按字段顺序选择id,名称(23,33,55,2)(id,2,23,33,55)

只需在查询结束时添加以下内容:

order by field(id, 23, 33, 55, 2)

只需在查询末尾添加以下内容:

order by field(id, 23, 33, 55, 2)

+这就是我要去的地方。我不确定db是否会根据自己的突发奇想返回行,或者在子选择中跟随工会?@Fluffeh:嗯,工会子选择的“突发奇想”是书面的顺序。MySQL通常在加入时保持原样(尽管它不必这样做,SQL通常在集合上运行——即没有确定性排序)+1这就是我要使用它的地方。我不确定db是否会根据自己的突发奇想返回行,或者在子选择中跟随工会?@Fluffeh:嗯,工会子选择的“突发奇想”是书面的顺序。MySQL通常在加入时保持原样(尽管它不必这样做,SQL通常在集合上运行——即没有确定性排序),只是为了澄清,他试图实现的是在CSV ID列表上排序。因此,例如
(23,33,55,2)
(2,55,33,23)
将按该顺序返回ID。不仅仅是按id desc/asc排序。只是澄清一下,他试图实现的是按CSV id列表排序。因此,例如
(23,33,55,2)
(2,55,33,23)
将按该顺序返回ID。不仅仅是按id desc/asc排序。谢谢!这就是我需要的汉克斯!这就是我需要的有趣的方法:)也可能:
orderbyid!=23(ASC),id!=当我需要订购一个奇怪的字段组合时,我使用了它,该组合会根据另一个字段的不同而变化,不用说,写这是一个非常复杂的查询,包括了答案,以防他真的想要更复杂的东西,但试图给出一个简化的例子,字段方法不起作用。这是因为MySQL将布尔值转换为整数进行排序。所以false变为0,true变为1(并且0和1有一个定义的顺序),我几乎可以肯定它在大多数数据库中都有效,而不仅仅是MySQL有趣的方法:)也可能:
orderbyid!=23(ASC),id!=当我需要订购一个奇怪的字段组合时,我使用它,这个组合会根据另一个字段而变化,不用说,写这是一个非常复杂的查询,包括了答案,以防他真的想要更复杂的东西,但试图给出一个简化的例子,字段方法不起作用。这是因为MySQL将布尔值转换为整数进行排序。所以false变为0,true变为1(并且0和1有一个定义的顺序),我几乎可以肯定它适用于大多数数据库,而不仅仅是mysql