php mysql按获取的顺序对结果进行排序
在使用in语句时,如何按照数组中ID的顺序对得到的结果排序: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
从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