php – 自定义MySQL排序

前端之家收集整理的这篇文章主要介绍了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;

只要没有一个用户具有非常长的序列(如在您的示例中),这将起作用.

没有“始终有效”的解决方案,因为很容易想出一个无法实现目标的情况.

猜你在找的PHP相关文章