php - 给出一个ID列表,如何将MySQL中查询出的记录根据ID列表中,ID出现的次数排序。

查看:130
本文介绍了php - 给出一个ID列表,如何将MySQL中查询出的记录根据ID列表中,ID出现的次数排序。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

怎样才能最大效率地实现这样的排序功能并分页?

程序是PHP,MySQL有如图的一张表。要根据一个ID list(ID可重复),取出含有对应ID的记录,并按照ID在list中出现的次数排序。

$id_list = '1,1,2,3,4,4,5,2,4';
$sql =
    \"select * from tb
where hide=0 and id in ($id_list)
order by ??????
limit 1,4\";

...

解决方案

提供一个思路:
第一步,由于需要对ID出现的次数进行排序,因此我们需要统计$id_list当中单个id值出现的次数,所以我们可以定义一个function来完成这件事情:

function sortArray($id_list) 
{
    // 将字符串转化成为数组,同时统计单个id出现的次数
    $idValue = array_count_values(explode(',', $id_list));
    // 根据id取值出现的次数排序数组
    arsort($idValue);
    // 将数组转化成为字符串返回回去
    return implode(array_keys($idValue), ',');
}

第二步,MySQL提供了根据指定字段取值排序的方法

ORDER BY FIELD(COLUMN,VALUE1,VALUE2,VALUE3,VALUE4...);

结合第一步,我们可以得出如下的代码:

// 需要排序的依据
$id_list_sorted = sortArray($id_list);

// SQL语句
SELECT * FROM tb WHERE hide=0 and id IN ($id_list) ORDER BY FIELD(id, $id_list_sorted) limit 0,4;

这篇关于php - 给出一个ID列表,如何将MySQL中查询出的记录根据ID列表中,ID出现的次数排序。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆