swuhvxee
V2EX  ›  问与答

新手请教一个关于 MySQL 和 PHP 取值排序的问题

  •  1
     
  •   swuhvxee · Feb 1, 2018 · 2806 views
    This topic created in 3202 days ago, the information mentioned may be changed or developed.

    现在通过 sql 按照时间排序取出最新的 50 条商品数据, 然后 while 输出这 50 条商品信息。

    同时,需要取出这 50 条中点击量最高的 1 条或者多条信息,怎么做?

    wayne712
    wayne712
    Feb 1, 2018❤️1
    1
    遍历 50 条商品信息, 将所有点击量数据存到另外一个数组, 然后对这个点击量数组进行排序, 最后根据已排序的点击量数组下标值反查商品信息数组即可
    swuhvxee
    swuhvxee
    OP
    Feb 1, 2018
    2
    @wayne712 是在 while 中把点击量存入数组进行比较,然后取出最大的吧。我也这么想过,有没有更简单的方法呢
    swuhvxee
    swuhvxee
    OP
    Feb 1, 2018
    3
    @wayne712 因为新手,我也想到了这个办法,总觉得是个笨办法,是我的幻觉还是只能这么解决
    wellCh4n
    wellCh4n
    Feb 1, 2018
    4
    写两条 sql,一条获取 50 条,一条获取 50 条里面点击量最高的那条
    eslizn
    eslizn
    Feb 1, 2018
    5
    点击量有在商品中存储么?有的话 usort 一下就可以了
    zakokun
    zakokun
    Feb 1, 2018
    6
    你要取最新的 50 条,然后这 50 条中拿最高的 N 条

    那自然就是数据库 select 50 个呗,拿出来以后 foreach 排序。 这思路很自然 你还想怎么优化?
    swuhvxee
    swuhvxee
    OP
    Feb 1, 2018
    7
    @eslizn
    @zakokun 这样 usort,foreach 排序会不会打乱原有的 50 条排序
    swuhvxee
    swuhvxee
    OP
    Feb 1, 2018
    8
    @eslizn
    @zakokun
    这个需求确实很蛋疼,又要按照时间排序输出商品列表。
    又要输出其中这些商品的热门商品
    swuhvxee
    swuhvxee
    OP
    Feb 1, 2018
    9
    此问题已解决。感谢解惑
    b821025551b
    b821025551b
    Feb 1, 2018
    10
    这个需求本身就很矛盾吧。。。。
    swuhvxee
    swuhvxee
    OP
    Feb 1, 2018
    11
    @b821025551b 不矛盾啊,时间排序和热门排序本身就不矛盾。。。关键是我在练习这个项目中,不想额外添加 sql,因为不知道是否可以在一个动作内解决
    zakokun
    zakokun
    Feb 1, 2018
    12
    @swuhvxee 你用个新的数组处理排序啊, 这种需求很正常吧,多做做就好 比如很多的最新 50 个的榜单,然后给这 50 个中最热门的标记一个『最热』之类的,正常
    swuhvxee
    swuhvxee
    OP
    Feb 1, 2018
    13
    @zakokun 我也是这么做的,把点击量放到一个数组里比较然后找出下标来判断了。感谢你的回答
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1537 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 12:12 · PVG 20:12 · LAX 04:12 · JFK 07:12
    ♥ Do have faith in what you're doing.