加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 自定义MySQL排序

发布时间:2020-12-13 17:56:12 所属栏目:PHP教程 来源:网络整理
导读:我有一个需要自定义排序的查询,修剪到最小的东西,如: SELECT u.*,p.*,p.id as product_idFROM users u,products p WHERE u.id = p.user_idORDER BY product_id DESC 我得到一组行,如: UserID ProductID 2 5 2 4 3 3 1 2 1 1 但我希望它实际上像这样对SOMET
我有一个需要自定义排序的查询,修剪到最小的东西,如:
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;

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读