我真的很苦恼,现在已经很久了,并且已经在这里问了两个问题!生气 - 我需要根据条件对结果进行分组
因此,这里有一个希望更明确的问题。
我有一个包含几千种产品的产品数据库。
产品可以按item
分组,以便不会在我的搜索结果中显示基本相同但结尾不同的多个项目。
所以,一个简单的select
查询看起来像:
SELECT * FROM products GROUP BY item
这会给我所有的产品只显示了每个项目(该想法是,观察客户点击别的东西来显示所有的完成选项)
我可以使用类似
SELECT *, GROUP_CONCAT(finishes) FROM products GROUP BY item
但让我完成选项...这里就是我有问题
在我的搜索结果页面中,分组的“随机”顺序对我来说并不好。我需要能够有从小组条款取决于以下condtions
- If there is no stock of any finish, then display the cheapest option
- If there is stock, then display the cheapest item which is in stock
获取只是一个ID是不行的,我需要完整的记录显示的项目,所以在某种程度上我需要的是一个条件语句确定分组记录的呈现顺序,以确保我从recordset
获得的项目符合上述标准。
我根本无法解决如何做到这一点,我尝试了数百万个不同的INNER JOIN
和'CASE场景,但却无法让它工作。
这里就是我得今天上午:
这是给我的结果,而是形成原因,一些项目被排除在结果和排序顺序仍然是不正确的。
要回答以下@DRapp,这里的一些基本的样本数据
item | price | finish | totalStock
item 1 | £1 | red | 2
item 1 | £1 | blue | 1
item 1 | £1.50 | blue & red | 1
item 2 | £2 | red | 0
item 2 | £3 | blue | 1
item 3 | £3.50 | blue & red | 1
item 3 | £1 | red | 0
item 3 | £2 | blue | 1
item 4 | £4.50 | blue & red | 1
item 5 | £1.50 | blue | 0
item 5 | £2.50 | green | 0
item 5 | £0.50 | orange | 0
我想看到的结果是:
- 项目1,红(sumTotalStock = 4) - “红色和蓝色的股票都最廉价的&。示任一结果是好的,但为100%的完美,显示出红色作为库存是最大
- 项目2,蓝色(sumTotalStock = 1) - ”蓝色是唯一的完成的库存
- 项目3,蓝(sumTotalStock = 2) - “显示蓝色,因为它是最便宜的股票
- 项目4,蓝色&红(sumTotalStock = 1)-'there没有完成的选项,所以只显示这一块,无论股票/价格
- item 5,orange(sumTotalStock = 0) - 'none i n股票,但显示橙色,因为它是最便宜的。
显然有更多的数据,以实际显示比刚跑完,价格,产品说明等也,这可能取决于完成,因此我也需要得到完整的记录,但是这个数据的例子应该解释原则。
在Oracle中,我会写一个USER DEFINED AGGREGATE FUNCTION - 不确定是否有关于mysql。也许写一个函数,将该项目作为参数,然后返回一个完成的字符串。 – Randy 2012-03-18 13:51:45
很确定这是一个最大的每组问题的例子。搜索带标签的问题以查看可能有所帮助的一些解决方案:http:// stackoverflow。com/questions/tagged/most-n-group- – 2012-03-18 13:53:12
您可以转储一些示例数据,包括没有完成的示例数据以及定价样本等。然后展示你想要什么样的最终结果(如果Martijn的回答不是你的最终结果) – DRapp 2012-03-18 14:41:34