MySQL Group By和Order by不能很好地一起玩

时间:2013-06-05 15:56:28

标签: mysql

我已经阅读了一些关于此的帖子,但似乎无法解决我的问题。

我正在调用两个数据库查询来填充彼此并排运行的两个数组,但它们不匹配,因为它们出来的顺序不同。我相信我与Group By有关,这可能需要一个子查询,但又有点丢失......

查询1:

SELECT count(bids_bid.total_bid), bidtime_bid, users_usr.company_usr, users_usr.id_usr 
FROM bids_bid 
INNER JOIN users_usr 
ON bids_bid.user_bid = users_usr.id_usr 
WHERE auction_bid = 36 
GROUP BY user_bid 
ORDER BY bidtime_bid ASC

查询2:

SELECT auction_bid, user_bid, bidtime_bid, bids_bid.total_bid 
FROM bids_bid 
WHERE auction_bid = 36  
ORDER BY bidtime_bid ASC

即使'Order by'相同,结果也不匹配。用户以不同的顺序出现。

我希望这是有道理的,并且事先感谢。

*更新* 我只想对我想要的输出添加一些清晰度。我只需要一个用户(user_bid)显示1个结果,第二个查询显示所有用户行。我只需要第一个显示为每个用户输入的第一行。因此,如果我可以在小组之前订购并且在最短的约会之前订购,那将是王牌......

3 个答案:

答案 0 :(得分:3)

这是可以预料的。您正在获取不参与分组的字段,并且不属于聚合函数。 MySQL允许这样的事情,但一般来说,未组合/未聚合的函数的结果可能会很糟糕。

由于MySQL可以自由选择可能多个“空闲”行的WHICH来为实际结果行选择,因此您将得到不同的结果。通常它会选择第一次遇到的“自由选择”结果,但这没有定义/保证。

答案 1 :(得分:0)

如果您希望根据某些结果集获得结果集中的唯一结果,则可以使用分组 组ID(列名)。通常分组与聚合函数一起使用,例如 (min,max,count,sum ..)。

排序或内部查询与结果集无关,我建议阅读一些介绍 有关分组和思考/处理Sql作为基于集合的语言的教程,大多数集合理论都适用于sql你会没事的。

答案 2 :(得分:0)

所以我使我不需要的问题复杂化。我找到的解决方案是在之前。

SELECT users_usr.company_usr, 
    users_usr.id_usr, 
    bids_bid.bidtime_bid, min(bidtime_bid) as minbid FROM bids_bid INNER JOIN users_usr ON bids_bid.user_bid = users_usr.id_usr
WHERE auction_bid = 36
GROUP BY id_usr
ORDER BY minbid ASC

感谢大家让我更努力地看待(尝试)...