【问题标题】:Display records that have a match in a join query first首先显示在连接查询中匹配的记录
【发布时间】:2011-08-23 08:29:14
【问题描述】:

为了简化问题,我有一个 listings 表和一个 listings_featured 表。 listings 主表包含所有列表的主要数据,但 listings_featured 表仅包含精选列表的数据。

我想先显示列表,按它们是否有特色排序,这意味着在执行 LEFT 或 RIGHT JOIN 时匹配的行应该排在第一位。我将如何只用一个查询而不是两个查询来做到这一点?

编辑

另外,是否可以将WHERE 条件添加到仅适用于加入 记录的查询?例如,在精选列表中,我只想要条件为 WHERE featured_end_date > now() 的列表 - 这应该只适用于加入的记录。这是因为商品展示的持续时间与商品的实际到期日期不同。

【问题讨论】:

    标签: php mysql database join


    【解决方案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 条件

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多