【发布时间】:2011-06-05 18:04:38
【问题描述】:
在我的 PHP 应用程序中,我有一个 mysql 文章表,其中包含以下列:
article_id articletext category_id score
每篇文章都有一个根据它的受欢迎程度计算的分数,并且属于特定类别(大约有 10 个类别可用)
我的问题是:我如何执行一个查询来返回得分最高的文章,同时按类别交替它们,这样如果可能的话,不会连续返回相同类别的文章。 例如,如果得分最高的文章得分:100,则返回集将类似于:
article_id articletext category_id score
-----------------------------------------------------
142 <.....> 5 100
153 <.....> 3 97
119 <.....> 5 99
169 <.....> 2 93
121 <.....> 7 89
197 <.....> 2 92
.
.
.
想到的第一个(简单)解决方案是执行 10 次选择(每个类别 1 次),按分数降序对它们进行排序,然后在 PHP 级别,在每个返回的数据集之间交替,一次选择一个结果,然后将它们组合成一个新数组。
有没有更有效的方法来实现这一点?如果可能的话,在 MySQL 级别
【问题讨论】:
-
有趣的问题 - 一个有点不正统的要求,但很有趣。纯粹基于 SQL 的解决方案可能很棘手。
标签: php mysql sql-order-by categories