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 1store_feedate_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 回答