前端之家收集整理的这篇文章主要介绍了
php – 自定义MySQL排序,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个需要
自定义排序的
查询,修剪到最小的东西,如:
SELECT u.*,p.*,p.id as product_id
FROM users u,products p
WHERE u.id = p.user_id
ORDER BY product_id DESC
我得到一组行,如:
UserID ProductID
2 5
2 4
3 3
1 2
1 1
但我希望它实际上像这样对SOMETHING进行排序(因此没有2个UserID与彼此相邻):
UserID ProductID
1 2
2 4
3 3
2 5
1 1
这甚至可以用MysqL,还是我需要一些PHP魔术?
解决此问题的规范
方法是枚举重复的行,然后按该值排序:
select t.*
from (SELECT u.*,p.id as product_id,row_number() over (partition by u.id order by (select NULL)) as seqnum
FROM users u join
products p
on u.id = p.user_id
) t
order by seqnum,id;
只要没有一个用户具有非常长的序列(如在您的示例中),这将起作用.
没有“始终有效”的解决方案,因为很容易想出一个无法实现目标的情况.