Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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 有没有办法在SQL中手动指定结果的顺序?_Php_Sql - Fatal编程技术网

Php 有没有办法在SQL中手动指定结果的顺序?

Php 有没有办法在SQL中手动指定结果的顺序?,php,sql,Php,Sql,我有一个PHP数组,其中包含要从MySQL数据库检索的行ID $ids = array(35, 20, 1, 5); 是否有任何方法可以构造一个SQL查询,从数据库中检索具有特定ID顺序的行的资源 换句话说,返回的行列表首先是ID为35的行,然后是ID为20的行,依此类推。在PHP/Javascript端排序会更容易,但有一种方法会让您想到如何在SQL中进行排序: select * from whatever where id in (35,20,1,5) order by case id w

我有一个PHP数组,其中包含要从MySQL数据库检索的行ID

$ids = array(35, 20, 1, 5);
是否有任何方法可以构造一个SQL查询,从数据库中检索具有特定ID顺序的行的资源


换句话说,返回的行列表首先是ID为35的行,然后是ID为20的行,依此类推。

在PHP/Javascript端排序会更容易,但有一种方法会让您想到如何在SQL中进行排序:

select * from whatever where id in (35,20,1,5) order by
case id when 35 then 0 when 20 then 1 when 1 then 2 when 5 then 3 end

在PHP/Javascript端进行排序会更容易,但有一种方法会让您想到如何在SQL中进行排序:

select * from whatever where id in (35,20,1,5) order by
case id when 35 then 0 when 20 then 1 when 1 then 2 when 5 then 3 end
试试这个

<?php
$ids = array(35, 20, 1, 5);
$q = 'select * from table where id in ('.implode(',',$ids).') order by find_in_set(id, \''.implode(',',$ids).'\')' ;
试试这个

<?php
$ids = array(35, 20, 1, 5);
$q = 'select * from table where id in ('.implode(',',$ids).') order by find_in_set(id, \''.implode(',',$ids).'\')' ;

返回结果后,为什么不在PHP中修改排序顺序呢?我有一个最近查看页面ID的javascript列表。这存储在各个浏览器的cookie中。然后,我使用AJAX抓取这些对象,保留页面的查看顺序会很好。当您得到结果时,为什么不在PHP中修改排序顺序呢?我有一个最近查看页面ID的javascript列表。这存储在各个浏览器的cookie中。然后我使用AJAX抓取这些对象,最好保持页面的查看顺序。做一堆
UNION
s不是首选。@Michael-这也是我的第一个想法,但后来我想-MySQL是否足够聪明,可以将“id in(const list)”优化为4个索引获取(本质上就是一个UNION)?它不会进行完整的表扫描吗?不知道,稍后会检查。答案是-是的,MySQL足够聪明,可以使用主键。刚查过。因此,这确实是最佳解决方案!使用
按案例排序
。做一堆
UNION
s不是首选。@Michael-这也是我的第一个想法,但后来我想-MySQL是否足够聪明,可以将“id in(const list)”优化为4个索引获取(本质上就是一个UNION)?它不会进行完整的表扫描吗?不知道,稍后会检查。答案是-是的,MySQL足够聪明,可以使用主键。刚查过。因此,这确实是最佳解决方案+1,我打算回答使用
field()
,但是
find_in_set()
更好,因为您可以使用准备好的语句和绑定参数轻松提供列表。+1,我打算回答使用
field()
,但是
find_in_set())
更好,因为您可以使用准备好的语句和绑定参数轻松提供列表。