2016-07-24 5 views
0

私は保証管理システムを作成しています。保証が終了しようとしているときに知らせるもの。Mysqlリストからすべてを選択し、別のリストの日付順に並べ替え

私は保証と呼ばれるリストに保証を保管しており、それぞれの保証の更新はwarranty_entriesという別の表に保管しています。

warrantiesテーブルには、自動インクリメントID、製品名、会社、作成者、作成日のみが含まれています。

warranty_entriesテーブルには、Auto_Increment ID、それが所属する保証のID、有効期限、開始日、日付または作成、その他のいくつかのフィールドが含まれています。

warrantiesから*を選択し、最新のエントリの終了日までにwarranty_entriesに注文しようとしています。

保証の有効期限は、最新の期限切れの保証書の有効期限です。

もう一度言い換えると、私はこれを説明するのが混乱しているので、私はもう一度言い換えるつもりです。 私はすべての保証を、最近作成されたエントリの有効期限の満了日までに注文したいと考えています。

テーブル内の1つのエントリを選択し、そのエントリの有効期限によって別のテーブルをソートするしか方法はありません。

UPDATE - テーブル構造所望の出力

TABLE: warranties 
----------------------------------------------------------------- 
|  id  |  1  |  2  |  3  | 
|  name  | chick warranty | duck warranty | cat warranty | 
----------------------------------------------------------------- 

TABLE: warranty_entries 
---------------------------------------------------- 
|  id  | 1 | 2 | 3 | 4 | 5 | 
| warranty_id | 1 | 2 | 2 | 3 | 3 | 
| end_date | 2010 | 2005 | 2006 | 2010 | 2015 | 
| start_date | 2008 | 2001 | 2005 | 2008 | 2010 | 
---------------------------------------------------- 

私が保証からすべてを選択し、warranty_entries内の対応するエントリの終了日でそれらを注文したいです。同じwarranty_idを持つ複数の保証エントリがあるので、私は注文するために最も新しい終了日を使用したいと思います。

ので問い合わせた後、結果セットは次のようになります。

RESULT SET: 
----------------------- 
| id |  name  | 
| 3 | cat warranty | 
| 1 | chick warranty | 
| 2 | duck warranty | 
----------------------- 
+0

テーブル構造と希望の出力を表示 –

答えて

0

あなたがそうのように、サブクエリでそれを行うことができます。

SELECT w.*, (SELECT end_date FROM warranty_entries we WHERE we.warranty_id = w.id ORDER BY end_date DESC LIMIT 1) AS end FROM warranties w ORDER BY end DESC

これが何をすべきトリック。必要に応じて、表と列の名前を変更します。

+0

特定の日付の中でどのようにエントリを選択しますか?私はサブクエリの中に常に最新のものを選ぶわけではないので、betweenステートメントを追加することはできません。 –

+0

サブクエリでbetweenを追加する必要があり、2つの日付間で最新のものを選択します。 – FMashiro

+0

しかし、私は最新の日付から選んで、それが特定の日付の間にあるかどうかをチェックしたいだけです。保証の有効期限がxとyの間であるかどうかを確認する。したがって、保証当りの最新ではないエントリから決して選択することはありません。 –

関連する問題