给出一个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\";

...

Image

阅读 4.6k
2 个回答

提供一个思路:
第一步,由于需要对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;
SELECT id, COUNT(id) GROUP BY id ORDER BY COUNT(id) DESC
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题