0

これに関するいくつかの投稿を読みましたが、問題を解決できないようです。

2 つのデータベース クエリを呼び出して、互いに並んで実行される 2 つの配列を設定していますが、出てくる順序が異なるため、それらは一致しません。私は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

「並べ替え」は同じですが、結果は一致しません。ユーザーは別の順序で出てきています。

これが理にかなっていることを願っています。事前に感謝します。

*更新* 私が望む出力が何であるかを少し明確にしたかっただけです。1 人のユーザー (user_bid) による 1 つの結果のみを表示する必要があります。2 番目のクエリでは、すべてのユーザーの行が表示されます。各ユーザーに入力された最初の行を表示するには、最初の行だけが必要です。グループの前に最小日付で注文できれば、それはエースです...

4

3 に答える 3

3

それは予想されることです。グループ化に関与せず、集計関数の一部ではないフィールドをフェッチしています。MySQL はそのようなことを許可しますが、一般に、グループ化されていない/集約されていない関数の結果は不安定になる可能性があります。

MySQL は、潜在的に複数の「空き」行のどれを実際の結果行として選択するかを自由に選択できるため、異なる結果が得られます。通常、最初に遭遇した「自由選択」の結果が選択されますが、それは定義/保証されていません。

于 2013-06-05T16:01:20.137 に答える
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 に答える
0

グループ ID (列名) に従って結果セットに一意の結果が必要な場合は、グループ化を使用します。通常、グループ化は (min、max、count、sum..) などの集計関数と共に使用されます。

順序付けまたは内部クエリは結果セットとは関係ありません。グループ化に関するいくつかの入門チュートリアルを読んで、Sqlをセットベースの言語として考え/扱うことをお勧めします。セット理論のほとんどはSQLに適用されます。

于 2013-06-05T16:16:34.803 に答える