2011-08-23 51 views
0

为了简化问题,我有一个列表表和列表功能表。主要列表表包含所有列表的主要数据,但列表功能表仅包含特色列表的数据。显示在首次加入查询中匹配的记录

我想显示按照它们是否首先显示的顺序排列的列表,这意味着在执行LEFT或RIGHT JOIN时应该先找到匹配的行。我怎么会只用一个查询而不是两个来做这件事?

编辑

此外,是否有可能一个WHERE条件添加到只适用于加入记录查询?例如,在特色商品列表中,我只希望那些条件为WHERE featured_end_date > now()的商家 - 这只适用于已加入的记录。这是因为上市的持续时间将与上市的实际到期日有所不同。

回答

1
SELECT l.* 
FROM listings l 
    LEFT JOIN listings_featured lf ON lf.lid = l.lid 
WHERE lf.lid IS NULL OR lf.featured_end_date > now() 
ORDER BY lf.lid IS NULL 

lf.lid IS NULLFALSE所有功能的资讯,以便在排序之前,他们其他的房源放。

编辑

添加WHERE条件:)你知道,如果有可能的WHERE条件附加只联接的记录做

+0

感谢? (我编辑了我的帖子) – emkay

+0

我编辑了我的答案,包括 – Crack

+0

http://stackoverflow.com/questions/17058034/sql-display-records-matching-lookup-table-first-then-all-other-records – Steve

0

最简单的方法是使用ORDER BY使用仅列表listing_featured中可用的列之一。空值应该到列表的底部。

相关问题