0

左結合を使用してクエリをフィルタリングする方法とorder by使用する場合limit

store_profile
id + store_name
1  | Accessorize.me 
2  | Active IT 
3  | Edushop
4  | Gift2Kids
5  | Heavyarm 
6  | Bamboo 

store_fee
id + store_id + date_end
1  |    1     | 27-6-2013
2  |    2     | 29-8-2013
3  |    3     | 02-6-2013
4  |    4     | 20-4-2013
5  |    4     | 01-7-2013
6  |    4     | 28-9-2013
7  |    5     | 03-9-2013
8  |    6     | 01-9-2013

私の以前のクエリ

$order_by_for_sort_column = "order by $column" //sorting column

$query = "SELECT * FROM store_profile sp LEFT JOIN store_fee sf ON (sf.store_id = sp.id) $order_by_for_sort_column";

私が欲しいのはorder by id desc、クエリ全体ではなくlimit 1テーブル用です。そのため、各店舗store_feeの最新の日付を取得できます。date_end

store_id 4(store_fee) でわかるように、3 つの異なる日付があり、最新の日付を取得したいだけです。

結果は次のようになります

1  | Accessorize.me  27-6-2013
2  | Active IT       29-8-2013
3  | Edushop         02-6-2013
4  | Gift2Kids       28-9-2013
5  | Heavyarm        03-9-2013
6  | Bamboo          01-9-2013
4

2 に答える 2

1
SELECT  a.id, a.store_name, MAX(b.date_End) date_end
FROM    store_profile a
        LEFT JOIN store_fee b
            ON a.ID = b.store_ID
GROUP   BY a.id, a.store_name

ただし、データ型 date_End列が varchar の場合、上記のクエリは機能しません。値が文字でソートされ、誤って望ましくない結果が得られる可能性があるためです。18-1-2013より大きいです01-6-2013

結合についてさらに詳しく知りたい場合は、以下のリンクにアクセスしてください。

于 2013-02-20T08:27:04.477 に答える
1
SELECT * 
FROM store_profile AS sp 
  LEFT JOIN (
    SELECT store_id, MAX(date_end) 
    FROM store_fee 
    GROUP BY store_id
  ) AS sf 
    ON sp.id=sf.store_id;
于 2013-02-20T08:33:14.623 に答える