为了简化问题,我有一个列表表和一个 listings_featured 表。主商家信息表包含所有商家信息的主要数据,但 listings_featured 表仅包含所列商品的数据。
我想首先根据它们是否有特色来显示所列出的列表,这意味着在执行LEFT或RIGHT JOIN时应该首先匹配的行。如何只使用一个查询而不是两个查询来完成此操作?
修改
此外,是否可以向查询添加WHERE
条件,该条件仅适用于已加入记录?例如,在特色列表中,我只想要具有条件WHERE featured_end_date > now()
的那些 - 这应该仅适用于已连接的记录。这是因为列出商品的持续时间与商品的实际到期日期不同。
答案 0 :(得分: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 NULL
对于所有精选商品信息均为FALSE
,因此在排序时,它们会在其他商家信息之前投放。
修改强>
添加了WHERE条件
答案 1 :(得分:0)
最简单的方法是使用仅在listing_featured表中提供的列之一使用ORDER BY
。空值应该放在列表的底部。