Site icon 时鹏亮的Blog

SQLite实现MySQL的ORDER BY FIND_IN_SET

请知悉:本文最近一次更新为 10年 前,文中内容可能已经过时。

其实这是一个误区,SQLite本身没这个函数,order by的时候肯定出错,我的同事之所以想使用这个就是想返回指定顺序的排序而已,想用SQLite实现MySQL的下述指令:

SELECT * FROM tablename WHERE id IN (1,10,8,5) ORDER BY FIND_IN_SET(id, '1,10,8,5')

开始找了半天方法完全没必要,这返回的是php中数组,既然有返回,那不妨将排序的部分放到返回数组之前,将排序后的结果返回即可。
示例如下:

$posts=getPostsByRelated();//直接取出数据,sql 指令为 select rowid,title from post where rowid in (68234,12016,16776,64147)
$orderarray=explode(",","68234,12016,16776,64147");//分割排序的id到数组
$newarray=array();
foreach($posts as $post){
$newarray[array_search($post['rowid'],$orderarray)]=$post;//根据值查找key并赋值给新数组
}
ksort($newarray);//按key排序,此时新数组就是按68234,12016,16776,64147排序后的了

如您从本文得到了有价值的信息或帮助,请考虑扫描文末二维码捐赠和鼓励。

尊重他人劳动成果。转载请务必附上原文链接,我将感激不尽。


与《SQLite实现MySQL的ORDER BY FIND_IN_SET》相关的博文:

Exit mobile version