2013-02-20 69 views
0

使用左加入篩選查詢與秩序和限制使用左的連接時

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 desclimit 1時如何使用order bylimit篩選查詢對於表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 

回答

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

爲了進一步獲得更多的知識有關加入,請訪問以下鏈接:

+0

數據類型是 「日期」 – rusly 2013-02-20 08:36:10

+0

@rusly那麼查詢工作正常': D' – 2013-02-20 08:36:58

+0

您認爲'store_profile.store_name'是唯一的,並將其用作關鍵字。這可能是錯誤的假設,並且將業務領域用作關鍵字,即使它們是獨特的,無論如何都是不好的做法。 – 2013-02-20 08:37:49

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;