Php 有没有办法在SQL中手动指定结果的顺序?
我有一个PHP数组,其中包含要从MySQL数据库检索的行IDPhp 有没有办法在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
$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())
更好,因为您可以使用准备好的语句和绑定参数轻松提供列表。