我必须在每个类别中选择最佳记录,例如
ID| Category_Id | Item_Id | Price
1 | 1 | 1 | 10
2 | 1 | 1 | 7
3 | 1 | 2 | 8
4 | 1 | 2 | 5
5 | 2 | 1 | 9
6 | 2 | 1 | 6
7 | 2 | 2 | 3
8 | 2 | 2 | 8
9 | 3 | 1 | 5
SELECT * FROM (
SELECT * FROM `products` ORDER BY price DESC
) AS r GROUP BY category_id
结果我得到了:
ID | CATEGORY_ID | ITEM_ID | PRICE
1 | 1 | 1 | 10
5 | 2 | 1 | 9
9 | 3 | 1 | 5
我必须修改查询才能返回唯一的ITEM_ID。例如,如果为类别1选择了项目1,则无法为类别2选择项目。因此,应为其选择下一个匹配项目。所以我应该得到:
ID | CATEGORY_ID | ITEM_ID | PRICE
1 | 1 | 1 | 10
8 | 2 | 2 | 8
9 | 3 | 1 | 5
类别#3仅包含一个项目#1,之前用于类别#1。但复杂性是我们不能跳过任何类别。因此,如果没有剩下的ID,它必须开始使用已经使用过的项目ID。
谁可以提供帮助?
UPD:好的,我觉得它太复杂了。可能是我可以简化我的问题,如何选择非重复项ID,并且不打扰跳过的类别?例如:
ID | CATEGORY_ID | ITEM_ID | PRICE
1 | 1 | 1 | 10
8 | 2 | 2 | 8
9 | 3 | 1 | 5
答案 0 :(得分:0)
我不认为(My)SQL可以找到你想要的东西。一个简单的解决方案是在多个查询中执行此操作。假设您想在页面上显示5张图片...
伪代码:
SELECT * FROM yourTable WHERE Price = (SELECT MAX(Price) FROM yourTable);
save category_id and item_id in an array;
save everything else what you need for display anywhere;
loop over the array
SELECT * FROM yourTable WHERE Price = (SELECT MAX(Price) FROM yourTable WHERE category_id NOT IN (/*insert used category_ids here*/) AND item_id NOT IN (/*insert used item_ids here*/));
save category_id and item_id in an array;
save everything else what you need for display anywhere;
end loop
present whatever you need on your page