2011-06-09 13 views
0

私は2つのMySQLデータベーステーブルを持っています.1つは、選手権のリストと別の記録タイトルの変更です。私は、最新のタイトルホルダーを引くことができるようにしたいLEFT JOINでMySQLクエリを注文する

championships

id INT AUTO_INCREMENT PRIMARY_KEY 
name VARCHAR(255) NOT NULL UNIQUE 
rank INT(2) NOT NULL DEFAULT '1' 

title_history

​​

:スキーマは次のようになります。私は現在、次のMySQL LEFT JOINのクエリでのタイトルホルダーを引くことができます。

SELECT c.id, h.winner 
FROM championships c 
LEFT JOIN title_history h 
ON c.id = h.championship 
ORDER BY c.rank ASC 

しかし、これは単にデフォルトのインデックスの各チャンピオンシップのため最初の結果(私は推測idを)引っ張ります。句としてORDER BY h.date_wonを追加しようとすると、クエリが失敗して結果が返されないように見えます。

何か間違っていますか?

+0

'放置championships.rank'んか? –

+0

それで、私は重要な選手権を注文することができます。 –

+1

私は本当にそれを得ることはできませんU各選手権のために最初にしたい場合は、いくつかのグループ化だけでなく、残っている必要がありますが、このクエリuはここで不完全な貼り付けですか? 'order by'を変更すると行数が変わらないので、このクエリで何が変わったのでしょうか? –

答えて

0

が、私はそれを割れてたと思います!

SELECT c.id, c.name, h.winner 
FROM championships c 
LEFT JOIN title_history h 
ON c.id = h.championship 
GROUP BY c.id 
ORDER BY c.rank ASC, h.date_from ASC 

EDIT:私はそれを割れていないを次のクエリでは、私は必要なものを私に与えているようです。私はチャンピオンシップIDでグループ分けしているので、その後タイトル獲得者がいたとしても、最初にタイトル獲得者になるだけです。

EDIT 2:次のクエリを解決

SELECT friendly_name, 
(SELECT winner FROM title_history WHERE championship = c.id ORDER BY date_from DESC LIMIT 1) 
FROM championships AS c 
ORDER BY name 
+0

私はあなたがテーブル 'チャンピオンシップ'の主キーである 'id'として' GROUP BY c.id'を必要としないと思います。 –

+0

uグループをc.Idにすると... incorect構文のように見えます。 –

+0

@Piotr:MySQLで正しくあります。 –

0

これは、ちょうど最後の(決定)選手権表示されます:

SELECT winner 
FROM title_history 
ORDER BY date_won DESC 
LIMIT 1 

はすべて優勝し、彼らの受賞者を表示するには、あなたのLEFT JOIN試みが正しいようです。おそらく、あなたはdate_wonで結果を注文したい:重要性によって

SELECT c.id, h.winner 
FROM championships c 
    LEFT JOIN title_history h 
    ON c.id = h.championship 
ORDER BY date_won DESC 

または順序(と同じ重要性を持つ選手権のためdate_wonで):

SELECT c.id, h.winner 
FROM championships c 
    LEFT JOIN title_history h 
    ON c.id = h.championship 
ORDER BY c.rank ASC 
     , h.date_won DESC 
+0

いいえ、私は各選手権で最新の勝者を望みます。しかし、私はまだその結果の結果を望んでいるにもかかわらず、チャンピオンシップには勝者がないかもしれないので、LEFT JOINです。 –

+0

これは勝者(現在遊んでいる)なしの選手権をキャッチしません – CristiC

+0

@マーティン:私はあなたが言ったが、 "私は最新のタイトルホルダーがほしい" * –