0

以下を例にとってみましょう。

SELECT 
    *
FROM 
    auctions AS a 
    LEFT JOIN winners AS w ON a.auction_id=w.auction_id
WHERE 
    a.active=1 
AND 
    a.approved=1 
GROUP BY
    a.auction_id
ORDER BY
    a.start_time DESC
LIMIT
    0, 10;

winnersこれは、テーブル内の複数の結果と一致する場合があります。両方は必要ありませんが、一致するものが複数ある場合に取得する行を制御したいと思います。ORDER BY勝者テーブルでを実行して、必要な行が最初の行であることを確認するにはどうすればよいですか?

4

2 に答える 2

3

テーブルの構造を見ずに正確に答えることは困難ですが、winnersテーブルに勝者の日付列などがある場合は、集計関数を使用して最初のレコードを取得できます。

次に、次のような最も早い日付のレコードを返すことができます。

SELECT *
FROM auctions AS a 
LEFT JOIN winners w1
  ON a.auction_id=w1.auction_id
LEFT JOIN
(
  select auction_id, min(winner_date) MinDate -- replace this with the date column in winners
  from winners 
  group by auction_id
) AS w2
  ON a.auction_id=w2.auction_id
  and w1.winner_date = w2.MinDate
WHERE a.active=1 
  AND a.approved=1 
ORDER BY a.start_time DESC
于 2013-02-07T15:15:02.460 に答える
1
SELECT *
FROM   auctions AS a
       LEFT JOIN (select auction_id from winners order BY auction_id limit 1) AS w ON a.auction_id = w.auction_id
WHERE  a.active = 1
       AND a.approved = 1
GROUP  BY a.auction_id
ORDER  BY a.start_time DESC

join句のwinnersテーブルへの参照をサブクエリに変更します。これにより、返されるレコードの数とその順序を制御できます。

于 2013-02-07T15:14:28.203 に答える