为表中的一列中的每个不同条目选择完整的第一行,按照另一列的顺序排列

时间:2011-06-17 13:52:14

标签: php mysql

我有一个包含多列的MySQL数据库。条目可以多次出现在列中(主键除外)。我希望能够为一列中的每个匹配的不同条目返回整个行,该行包含来自表的第一个外观,按第二列排序。考虑如下表:

 ---------------------------------------
 | id | item   | cost | location | ... |
 ---------------------------------------
 | 1  | apple  |  10  | kitchen  | ... |
 | 2  | apple  |  20  | fridge   | ... |
 | 3  | banana |  20  | kitchen  | ... |
 | 4  | carrot |  30  | fridge   | ... |
 | 5  | apple  |  10  | barn     | ... |
 ---------------------------------------

因此,按成本(然后是id)排序并选择不同的项目,我会得到第1,3和4行(每个项目最便宜的成本。)按位置排序(然后是id)并选择不同的项目,我会回来5,4,3。(每个项目的字母第一个位置。)

我目前选择不同的whatevers然后为每一个,按索引列对表进行排序并选择它出现的第一行,然后,当我拥有它们时,按索引求助该结果集。我也可以选择索引排序的整个表,然后每次找到新的东西时都会向本地数组添加一行,直到我有限制为止。第一个需要大量选择,第二个需要阅读整个表格。

有更好的方法吗? (我使用的是MySQL 5.1.53和PHP 5.2.11。)

1 个答案:

答案 0 :(得分:0)

如果我理解得很清楚,那么你的问题就是SQL中分组最大的。它已在StackOverflow上被询问,例如here

MySQL manual还有一个专门页面,以及许多博客文章,例如此高级post