如何在使用左连接时使用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
答案 0 :(得分: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
。
要进一步了解联接,请访问以下链接:
答案 1 :(得分: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;