0

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

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

查询一:

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

即使“排序依据”相同,结果也不匹配。用户以不同的顺序出现。

我希望这是有道理的,并提前感谢。

* 更新 * 我只是想更清楚地说明我想要的输出是什么。我只需要显示一个用户 (user_bid) 的 1 个结果,第二个查询显示所有用户行。我只需要第一个来显示为每个用户输入的第一行。因此,如果我可以在小组之前并在最短日期之前订购,那将是王牌...

4

3 回答 3

3

这是可以预料的。您正在获取未参与分组且不属于聚合函数的字段。MySQL 允许这样的事情,但通常未分组/未聚合函数的结果可能很不稳定。

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

于 2013-06-05T16:01:20.137 回答
0

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

排序或内部查询与结果集无关,我建议阅读一些关于分组的介绍性教程,并将 Sql 视为基于集合的语言,并且大多数集合理论都应用于 sql 你会没事的。

于 2013-06-05T16:16:34.803 回答
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

感谢大家让我看起来(尝试)更加努力......

于 2013-06-05T17:59:09.800 回答